2009-10-05 17 views
14

Come si può dividere una parola con le sue lettere costituenti?Dividere le parole in lettere in Java

Esempio di codice che non funziona

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"); 
      } 
     } 
    } 

Il problema sembra essere nel carattere \\a. Dovrebbe essere un [A-Za-z].

+1

Il tuo esempio non mettere in chiaro se si vuole "123" di essere divisi o no. – patros

+0

patros: non voglio "123" essere diviso. –

risposta

41

È necessario utilizzare split("");.

Questo lo dividerà per ogni carattere.

Tuttavia penso che sarebbe meglio per iterare su personaggi s' un String in questo modo:

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

Non è necessario creare un'altra copia del vostro String in una forma diversa.

+0

+1: Hmm, non ho pensato di creare un'altra copia della stringa. Buon punto – Powerlord

+1

Una cosa da considerare qui è str.charAt (i) restituirà un carattere. Quindi se hai bisogno di una stringa dovrai fare Character.toString (str.charAt (i)). Questo creerà una copia di quel personaggio, ma è ancora meglio di O (n) lo spazio che l'uso di str.split ("") ti darebbe. – catalyst294

+2

Questo crea sempre un array che è uno slot più lungo di quello che i caratteri ci sono nella stringa, con il primo carattere vuoto. Esempio "abcd" restituirebbe {"", "a", "b", "c", "d"} –

25

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

+0

+1: semplice, conciso e facilmente utilizzabile per. – Powerlord

+1

La creazione di un array di caratteri in più è un passaggio aggiuntivo che non è necessario. – jjnguy

+0

Depends. La mia _guess_ è che al di sopra di una certa lunghezza un arrayCopy e l'accesso diretto all'array sono "più veloci" di quelli di centinaia di charAt. – Zed

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

Sono quasi certo che non vuole che gli spazi vengano visualizzati.

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

Compresi i numeri ma non spazi bianchi:

"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

Senza numeri e spazi:

"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

Il tuo codice gettato sotto l'errore quando viene eseguito.'Eccezione nel thread" main "java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0 ** (? <= \ G. {1}) ** ^ \t a java.util.regex .Pattern.error (Pattern.java:1924) \t a java.util.regex.Pattern.sequence (Pattern.java:2090) \t a java.util.regex.Pattern.expr (Pattern.java:1964) \t a java.util.regex.Pattern.compile (Pattern.java:1665) \t a java.util.regex.Pattern. (Pattern.java:1337) \t a java.util.regex.Pattern.compile (Pattern.java:1022) \t a java.lang.String.split (String.java:2313) \t a java.lang .String.split (String.java:2355) ' – mannedear

3

È possibile utilizzare

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

Aggiunge una stringa vuota aggiuntiva a 0 posizione, quindi l'array è un extra. – JPM

Problemi correlati