2016-04-15 34 views
1

Ich habe eine Zeichenfolge, die aus einer Liste von X- und Y-Koordinaten besteht. Die x- und y-Koordinaten sind durch ein Komma getrennt, und jede Koordinate endet mit einem Punkt, der das Ende der Koordinate angibt. Ich brauche diese Zeichenfolge zu brechen jedes x zu bekommen und y-Koordinate, aber ich kann mich nicht für Schleife bekommen richtigZerlegen Zeichenfolge basierend auf Zeichen

Zum Beispiel zu arbeiten:

String coords= "3,1.2,0.1,1.0,2.1,3.2,3.3,3."; 

Jedes Komma x trennt und y-Koordinate. Der Punkt (.) Beendet die Koordinate und startet eine neue. Die tatsächliche Koordinatenliste würde also so aussehen.

  • X 3, Y: 1
  • X: 2, Y: 0
  • X: 1, Y: 1
  • X: 0, Y: 2
  • .. .. ....
  • .... ....

Der Grund, es in einer seltsamen Art und Weise, wie dies geschehen ist Weil ich an einem Robotikprojekt arbeite und es ein Speicherproblem gibt, kann ich keine Arrays für die Koordinaten verwenden, daher muss eine einzige Zeichenfolge vom PC an das eingebettete System übergeben werden, die in Coords aufgeteilt werden muss .

+0

Sie könnte meine einzige Zeile Lösung finden. –

Antwort

1

Versuchen Sie dies.

String coords= "3,1.2,0.1,1.0,2.1,3.2,3.3,3."; 
    for (int i = 0, j = 0; i < coords.length(); i = j + 1) { 
     j = coords.indexOf(".", i); 
     if (j == -1) break; 
     int k = coords.indexOf(",", i); 
     int x = Integer.parseInt(coords.substring(i, k)); 
     int y = Integer.parseInt(coords.substring(k + 1, j)); 
     System.out.printf("X:%d, Y:%d%n", x, y); 
    } 
+0

Danke. Funktioniert gut. – PRCube

1
String coords= "3,1.2,0.1,1.0,2.1,3.2,3.3,3."; 
for(int i=0; i< coords.length(); i++) 
{ 
    if (coords.charAt(i) == '.') 
    { 
     String s = coords.substring(i); 

     System.out.println("X:"+ s.split(",")[0] + " " + "Y:"+s.split(",")[1]); 
    } 

} 
+0

Leider funktioniert das nicht. Ich kann Array nicht verwenden, dies ist für ein Robotik-Projekt und es gibt eine Einschränkung mit Speicher. Ich bekomme aus irgendeinem Grund keine Ausgabe. – PRCube

+0

was ist Ihre genaue Anforderung? um alle X, Y s in einer einzigen Saite zu erhalten? – SomeDude

+0

Ja, die Koordinaten werden als einzelne Zeichenfolge übergeben. Ich muss jeden String verarbeiten und zerlegen (lese jede Koordinate) und arbeite damit. Selbst wenn ich eine Ausgabe davon bekommen kann, werde ich es von dort aus verwalten können. – PRCube

0

Wenn Ihr Ziel ausgegeben String erhalten dann wäre ein Ansatz nur String replace() Methode verwendet werden,

NOfor Schleife, NOsplit() und NOarray wie folgt aus:

String s = "3,12.23,0.1,1.0,2.1,3.2,3.3,3"; 
s = "X:"+s.replace(",", ",Y:").replace(".", "\nX:");   
System.out.println(s) 

Ausgabe:

X:3,Y:1 
X:2,Y:0 
X:1,Y:1 
X:0,Y:2 
X:1,Y:3 
X:2,Y:3 
X:3,Y:3 
0

Eine ziemlich einfache Möglichkeit ist ein regulärer Ausdruck.

Pattern pattern = Pattern.compile("(\\d+),(\\d+)\\."); 

Matcher matcher = pattern.matcher(inputString); 
while (matcher.find()) { 
    int x = Integer.parse(matcher.group(1)); 
    int y = Integer.parse(matcher.group(2)); 
    // do whatever you need to do to x and y 
} 
0

die Split-Methode (zum ersten Mal zwischen den Punkten, zum zweiten Mal zu spalten zwischen Kommas aufzuteilen) Verwenden Sie

public class SplitCoordinates { 
    static public void main(String[] args) { 
     String s = "3,1.2,0.1,1.0,2.1,3.2,3.3,3"; 
     for (String s2: s.split("\\.")) { 
      String[] s3 = s2.split("\\,"); 
      int x = Integer.parseInt(s3[0]); 
      int y = Integer.parseInt(s3[1]); 
      System.out.println("X:" + x + ",Y:" + y); 
     } 
    } 
} 
Verwandte Themen