2017-04-10 7 views
-2

konvertieren Angenommen ich die folgende Eingabe von einem Scanner erhalten: "5B1 2B2 9B3 1R4 3R5 8R6 10R7"Wie eine Reihe von alphanumerischen Zeichenfolgen in drei verschiedenen Teilen

Ich möchte die Daten in etwas ähnlich wie diese gespeichert haben:

array[0] = {5,B,1} 
array[1] = {2,B,2} 

HINWEIS: Ich brauche die Nummer auf der linken Seite des Charakters ein GESAMT gespeichert.
Beispiel: das Array erreichen enthält {5B1,3B2} etc ..

String input = scanner.nextLine(); 
String[] nodes = input.split(" "); 

Ich konnte: ich 10R7 müssen gespeichert als {10,R,7} und nicht {1,0,R,7}

Mit diesem werden

EDIT:

Ich versuchte diesen Ansatz (WORKS):

String[][] aa = new String[nodes.length][]; 
for(int i =0; i<nodes.length; i++){ 
    aa[i] = nodes[i].split("((?<=[a-zA-Z])(?=[0-9]))|((?<=[0-9])(?=[a-zA-Z]))"); 
} 

Dies geschieht, wenn Sie sofort drucken:

[Ljava.lang.String;@55f96302 
    [Ljava.lang.String;@3d4eac69 
    [Ljava.lang.String;@42a57993 
    [Ljava.lang.String;@75b84c92 
    [Ljava.lang.String;@6bc7c054 
    [Ljava.lang.String;@232204a1 
    [Ljava.lang.String;@4aa298b7 

Das obige Problem tritt nur auf, wenn ich versuche, es zu drucken mit:

System.out.println(aa[i]); 

Es gibt eine andere Art und Weise ist es der Druck aber Ich muss es nicht drucken. Hier

+0

Zeichen dauert nur ein Zeichen zu einem Zeitpunkt. – Omore

+0

Was hast du probiert? –

+0

Verwenden Sie 'split (" ")' mit Leerzeichen dann verwenden Sie 'split (" ")' ohne Leerzeichen erhalten Sie Ihr char-Array – Vishrant

Antwort

1

Sie Split \\s verwenden können, um Ihre Worte zu bekommen, dann können Sie s.toCharArray() an array of char verwenden:

String str = "5B1 2B2 9B3 1R4 3R5 8R6 10R7"; 
List<String[]> list = new ArrayList<>(); 
String spl[] = str.split("\\s+"); 

for (String s : spl) { 
    String sp[] = s.replaceAll("([a-zA-Z]+)", "$1-").replaceAll("([0-9]+)", "$1-").split("-"); 
    list.add(sp); 
} 

Array Druck:

list.forEach((rs) -> { 
    System.out.println(Arrays.toString(rs)); 
}); 

Dies kann gibt Ihnen:

[5, B, 1] 
[2, B, 2] 
[9, B, 3] 
[1, R, 4] 
[3, R, 5] 
[8, R, 6] 
[10, R, 7] 
+0

was ist mit \\ s +? – Omore

+0

good point @Omore schon editieren danke;) –

+0

wie bekomme ich [10, R, 7] für die letzte statt [1,0, R, 7]? –

0

ist die Probe:

public static void main(String args[]) { 
    String s = "5B1 2B2 9B3 1R4 3R5 8R6 10R7"; 

    // split input string by spaces first 
    // convert every chunk into char array 
    List<char[]> result = 
      Arrays.asList(s.split(" ")).stream().map(String::toCharArray).collect(Collectors.toList()); 

    for (char[] r : result) { 
     System.out.println(Arrays.toString(r)); 
    } 
} 

Ausgang:

[5, B, 1] 
[2, B, 2] 
[9, B, 3] 
[1, R, 4] 
[3, R, 5] 
[8, R, 6] 
[1, 0, R, 7] 
+0

Bitte fügen Sie einige Details mit Ihrem Code hinzu. – Omore

+0

kann ich es so haben, dass die Ausgabe {10, R, 7} ist? –

+0

@MostafaOsama natürlich –

1
public static void main(String[] args) { 

    Scanner in = new Scanner(System.in); 
    String str = in.nextLine(); // Read 5B1 2B2 9B3 1R4 3R5 8R6 10R7 from user 

    String[] sArr = str.split(" "); // break into array of string ["5B1", "2B2", .... "10R7"] 

    char[][] cArr = new char[sArr.length][]; // create a 2D char array to save the string array 
    int idx = 0; 

    for(String s : sArr){ 
     cArr[idx++] = s.toCharArray(); // [['5','B','1'], ['2','B','2'], ...] 
    } 

    //Print the array 
    for(char[] c1 : cArr){ 
     for(char c2: c1){ 
      System.out.print(c2 + " "); 
     } 
     System.out.println(); 
    } 
} 

enter image description here

0

einfach die Zeichenfolge aufgeteilt

String str = "5B1 2B2 9B3 1R4 3R5 8R6 10R7" 
String[] parts = str.split(" "); 
for (int i = 0; i < parts.length; i++) { 
    System.out.println(parts[i]); 
} 
+0

Fragen beziehen sich auf char [] nicht String []. – Omore

1

Okay, nach einigem Herumspielen fand ich eine Lösung:

Für alle, die hier etwas Ähnliches haben könnten, ist es:

Scanner scanner = new Scanner(System.in); 
String input = scanner.nextLine(); 
String[] nodes = input.split(" "); 

String[][] aa = new String[nodes.length][]; 

for (int i = 0; i < nodes.length; i++) { 
    aa[i] = nodes[i].split("((?<=[a-zA-Z])(?=[0-9]))|((?<=[0-9])(?=[a-zA-Z]))"); 
} 
Verwandte Themen