Necesito dividir una cadena en una matriz de cadenas de un solo carácter.Separar cadena en una matriz de cadenas de caracteres
Por ejemplo, la división "gato" daría la matriz "c", "a", "t"
Necesito dividir una cadena en una matriz de cadenas de un solo carácter.Separar cadena en una matriz de cadenas de caracteres
Por ejemplo, la división "gato" daría la matriz "c", "a", "t"
"cat".split("(?!^)")
Esto producirá
array [ "c", "a", "t"]
¿Cómo y por qué? ¿Es esto una expresión regular que significa cualquier personaje? Porque en mi opinión, con la forma en que funciona la división, esto debería dividirse solo en los caracteres reales (,?,!, ^, Y). Sin embargo, funciona como dices. – TyP
Esto es de hecho una expresión de expresiones regulares, llamada búsqueda anticipada negativa. Consulte la documentación aquí: http://docs.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html#sum – Erwin
@ EW-CodeMonkey '(?!' ... ')' es la sintaxis regex para una afirmación negativa - afirma que no hay coincidencia de lo que hay dentro de ella. Y '^' coincide con el comienzo de la cadena, por lo que la expresión regular coincide en cada posición que * no * es el comienzo de la cadena, e inserta una división allí. Esta expresión regular también coincide al final de la cadena y, por lo tanto, también agregaría una cadena vacía al resultado, excepto que la documentación 'String.split' [dice] (https://docs.oracle.com/javase/8/docs /api/java/lang/String.html#split-java.lang.String-) "las cadenas vacías finales no están incluidas en la matriz resultante". – Boann
String str = "cat";
char[] cArray = str.toCharArray();
+1 pero OP probablemente quiere una matriz de Cadena. –
Nitpicking, la pregunta original pide una matriz de String, no una matriz de Char. Sin embargo, es bastante fácil obtener una matriz de String desde aquí. – dsolimano
Sí, ya sé cómo obtener una serie de caracteres. Puedo iterar a través de la matriz de caracteres y crear una cadena de cada uno, si no hay otra forma. – Matt
Tal vez usted puede utilizar un bucle que pasa por el contenido de la cadena y extraer caracteres de caracteres usando el método charAt
.
Combinado con un ArrayList<String>
por ejemplo, puede obtener su matriz de caracteres individuales.
Tal vez podrías pararte sobre una pierna y cantar "God Save the Queen". Lo siento, pero esto ni siquiera está cerca de ser correcto. –
Eche un vistazo al método getChars() de la clase String.
Demasiado complicado. Las otras respuestas tienen soluciones mucho más simples –
"cat".toCharArray()
pero si necesita cadenas
"cat".split("")
Editar: que devolverán un primer valor de vacío.
"cat" .split ("") devolvería [, c, a, t], ¿no? Tendrás un personaje extra en tu Matriz ... – reef
El "cat" .split ("") no funciona como esperaba Matt, obtendrás un String vacío adicional => [, c, a, t]. – reef
Esta respuesta funciona ahora si está utilizando Java 8. Consulte http://stackoverflow.com/a/22718904/1587046 –
Una forma eficiente de convertir una cadena en una matriz de cadenas de un carácter sería hacer esto:
String[] res = new String[str.length()];
for (int i = 0; i < str.length(); i++) {
res[i] = Character.toString(str.charAt(i));
}
Sin embargo, esto no tiene en cuenta el hecho de que un char
en un String
podría representar la mitad de un punto de código Unicode. (Si el punto de código no está en el BMP). Para tratar con eso, necesita iterar a través de los puntos de código ... lo cual es más complicado.
Este enfoque será más rápido que usar String.split(/* clever regex*/)
, y probablemente sea más rápido que usar flujos Java 8+. Es probable rápido que esto:
String[] res = new String[str.length()];
int 0 = 0;
for (char ch: str.toCharArray[]) {
res[i++] = Character.toString(ch);
}
porque tiene que toCharArray
copia los caracteres a una nueva matriz.
Si se espera que los caracteres más allá Basic Multilingual Plane en la entrada (algunos caracteres CJK, nuevo emoji ...), se acerca como "ab".split("(?!^)")
no se puede utilizar, ya que romper esos caracteres (resultados en array ["a", "?", "?", "b"]
) y algo más seguro tiene que ser usado:
"ab".codePoints()
.mapToObj(cp -> new String(Character.toChars(cp)))
.toArray(size -> new String[size]);
Para resumir las otras respuestas ...
Esto funciona en todas las versiones de Java:
"cat".split("(?!^)")
Esto sólo funciona en Java 8 y hasta:
"cat".split("")
http://stackoverflow.com/questions/1521921/splitting-words-into-letters-in-java – birryree
A modo de referencia, "".join (["c", "a", "t"]) para recuperar "cat". – shuva