2009-10-05 22 views
14

Wie können Sie ein Wort in die einzelnen Buchstaben aufteilen?Wörter in Buchstaben in Java aufteilen

Beispiel-Code, der

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

das Problem nicht funktioniert scheint \\a im Charakter zu sein. Es sollte ein [A-Za-z] sein.

+1

Ihr Beispiel macht es nicht klar, ob Sie „123“ werden sich trennen wollen oder nicht. – patros

+0

patros: Ich möchte nicht, dass "123" aufgeteilt wird. –

Antwort

41

Sie müssen split(""); verwenden.

Das wird es durch jedes Zeichen aufteilen.

Aber ich denke, es wäre besser, eine String ‚s Zeichen iterieren etwa so:

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

es nicht erforderlich ist, eine weitere Kopie Ihrer String in einer anderen Form zu erstellen.

+0

+1: Hmm, ich dachte nicht daran, eine weitere Kopie der Zeichenfolge zu erstellen. Guter Punkt. – Powerlord

+1

Eine Sache, die hier zu beachten ist, ist str.charAt (i) wird ein Zeichen zurückgeben. Wenn Sie also einen String benötigen, müssen Sie Character.toString (str.charAt (i)) ausführen. Dies wird eine Kopie dieses Zeichens erstellen, aber das ist immer noch besser als O (n) Raum, den Sie mit str.split ("") erhalten würden. – catalyst294

+2

Das erstellt immer ein Array, das um einen Slot länger ist als die Zeichen in der Zeichenfolge, wobei das erste Zeichen leer ist. Beispiel "abcd" würde {"", "a", "b", "c", "d"} ergeben –

25

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

+0

+1: Einfach, prägnant, und kann leicht für zugeführt werden. – Powerlord

+1

Das Erstellen eines zusätzlichen Char-Arrays ist ein zusätzlicher Schritt, der nicht erforderlich ist. – jjnguy

+0

Hängt davon ab. Mein _guess_ ist, dass ein arrayCopy und direkter Array-Zugriff ab einer gewissen Länge "schneller" ist als der Aufruf von hunderten von charAts. – Zed

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

Ich bin mir ziemlich sicher, dass er nicht möchte, dass die Räume ausgegeben werden.

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

Zahlen einschließlich, aber nicht Leerzeichen:

"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

Ohne Zahlen und Leerzeichen:

"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

Ihr Code wird bei der Ausführung als Fehler ausgegeben.'Ausnahme im Thread" Haupt "java.util.regex.PatternSyntaxException: Dangle Meta-Zeichen '*' in der Nähe von Index 0 ** (? <= \ G. {1}) ** ^ \t bei java.util.regex .Pattern.error (Pattern.java:1924) \t bei java.util.regex.Pattern.sequence (Pattern.java:2090) \t bei java.util.regex.Pattern.expr (Pattern.java:1964) \t bei java.util.regex.Pattern.compile (Pattern.java:1665) \t bei java.util.regex.Pattern. (Pattern.java:1337) \t bei java.util.regex.Pattern.compile (Pattern.java:1022) \t bei java.lang.String.split (String.java:2313) \t bei java.lang .String.split (String.java:2355) ' – mannedear

3

können Sie

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

Dies fügt eine zusätzliche leere Zeichenkette zu 0 Position hinzu, so dass Array ein Extra ist. – JPM

Verwandte Themen