2009-10-05 13 views
14

¿Cómo se puede dividir una palabra en sus letras constituyentes?División de palabras en letras en Java

Ejemplo de código que no esté trabajando

class Test { 
     public static void main(String[] args) { 
      String[] result = "Stack Me 123 Heppa1 oeu".split("\\a");                     

      // output should be 
      // S 
      // t 
      // a 
      // c 
      // k 
      // M 
      // e 
      // H 
      // e 
      // ... 
      for (int x=0; x<result.length; x++) { 
       System.out.println(result[x] + "\n"); 
      } 
     } 
    } 

El problema parece estar en el carácter \\a. Debe ser un [A-Za-z].

+1

Su ejemplo no dejar claro que si quieres "123" que ser dividido o no. – patros

+0

patros: No quiero dividir "123". –

Respuesta

41

Necesita usar split("");.

Eso lo dividirá por cada personaje.

Sin embargo creo que sería mejor para iterar sobre una String caracteres 's de este modo:

for (int i = 0;i < str.length(); i++){ 
    System.out.println(str.charAt(i)); 
} 

Es innecesario crear otra copia de su String en una forma diferente.

+0

+1: Hmm, no pensé en crear otra copia de la cadena. Buen punto. – Powerlord

+1

Una cosa a considerar aquí es str.charAt (i) devolverá un char. Entonces, si necesitas una Cadena, necesitarás hacer Character.toString (str.charAt (i)). Esto creará una copia de ese personaje, pero eso es mejor que O (n) espacio que usar str.split ("") te daría. – catalyst294

+2

Eso siempre crea una matriz que es una ranura más larga que los caracteres que hay en la cadena, con el primer carácter vacío. El ejemplo "abcd" arrojaría {"", "a", "b", "c", "d"} –

25

"Stack Me 123 Heppa1 oeu".toCharArray()?

+0

+1: Simple, conciso, y se puede alimentar fácilmente para. – Powerlord

+1

Crear una matriz extra de caracteres es un paso adicional que no es necesario. – jjnguy

+0

Depende. Mi _guess_ es que, por encima de cierta duración, una matrizCopia y acceso directo a la matriz es "más rápido" que llamar a cientos de charAt. – Zed

3
char[] result = "Stack Me 123 Heppa1 oeu".toCharArray(); 
2

Estoy bastante seguro de que no quiere que se salgan los espacios.

for (char c: s.toCharArray()) { 
    if (isAlpha(c)) { 
     System.out.println(c); 
    } 
} 
6

incluidos los números pero no los espacios en blanco:

"Stack Me 123 Heppa1 oeu".replaceAll("\\W","").toCharArray();

=> S, t, a, c, k, M, e, 1, 2, 3, H, e, p, p, a, 1, o, e, u

Sin números y espacios en blanco:

"Stack Me 123 Heppa1 oeu".replaceAll("[^a-z^A-Z]","").toCharArray()

=> S, t, a, c, k, M, e, H, e, p, p, a, o, e, u

1
String[] result = "Stack Me 123 Heppa1 oeu".split("**(?<=\\G.{1})**"); 
System.out.println(java.util.Arrays.toString(result)); 
+0

Tu código arrojado debajo del error cuando se ejecuta.'Excepción en el hilo" principal "java.util.regex.PatternSyntaxException: carácter meta colgando '*' cerca del índice 0 ** (? <= \ G. {1}) ** ^ \t en java.util.regex .Pattern.error (Pattern.java:1924) \t en java.util.regex.Pattern.sequence (Pattern.java:2090) \t en java.util.regex.Pattern.expr (Pattern.java:1964) \t en java.util.regex.Pattern.compile (Pattern.java:1665) \t en java.util.regex.Pattern. (Pattern.java:1337) \t en java.util.regex.Pattern.compile (Pattern.java:1022) \t en java.lang.String.split (String.java:2313) \t en java.lang .String.split (String.java:2355) ' – mannedear

3

Puede utilizar

String [] strArr = Str.split(""); 
+4

Esto agrega una cadena adicional en blanco a la posición 0 para que la matriz sea una extra. – JPM

Cuestiones relacionadas