2017-03-22 1 views
0

Ich muss die Reihenfolge meiner Zeichenfolge auf den erwarteten Wert ändern. Und auch die ',' sollte Übereinstimmung entsprechend meiner erwarteten bekommen.Java - String-Konvertierung

String actual = "10684 ANNA MARIE DR, GLEN ALLEN, VA, APT 111, 23060"; 
String expected = "10684 ANNA MARIE DR, APT 111, GLEN ALLEN, VA 23060"; 

Damit kann ich das Ergebnis wie dieses

Assert.assertEquals(actual,expected); 

behaupten Jede Hilfe wäre sehr geschätzt.

+3

Ist dies ein Einzelfall oder muss es eine allgemeine Funktion sein? – LppEdd

+0

@LppEdd - Es ist eine generische Methode, wo ich das tatsächliche und erwartete über seine Argumente übergeben kann – Aishu

+0

Was passiert, wenn ein Element zweimal im Original auftritt? –

Antwort

1

Split die Strings basierend auf ,, sortieren Sie die resultierenden Arrays, dann Assert.assertArrayEquals verwenden, um die Arrays

0

Sie zu vergleichen, sollten diesen String mit Adressklasse ersetzen und dann einfach Adressen vergleichen. In Effektivem Java-Buch finden Sie ein Kapitel, in dem Sie sagen, dass String nicht gut ist, um eine andere Struktur zu ersetzen (und natürlich haben Sie hier eine Adressstruktur).

1

Sie können sie teilen und das Array sortieren und dann prüfen, ob sie gleich sind oder nicht.

String actual = "10684 ANNA MARIE DR, GLEN ALLEN, VA, APT 111, 23060"; 
String expected = "10684 ANNA MARIE DR, APT 111, GLEN ALLEN, VA 23060"; 

String arr1[] = actual.split(", "); 
String arr2[] = expected.split(", "); 

Arrays.sort(arr1); 
Arrays.sort(arr2); 

Assert.assertArrayEquals(arr1, arr2); 
+0

Sie gehen davon aus, dass das OP eine alphabetische Sortierung seiner Zeichenfolge durchführen muss. – Mistalis

+0

Gute Lösung, wenn man annimmt, dass das Ziel von OPs eigentlich nur besteht, wenn beide Strings die gleichen Informationen enthalten. Wenn es jedoch sein primäres Ziel ist, die Strings tatsächlich neu zu arrangieren ... - brauchen wir noch mehr Klärung von OP. – domsson

+0

Von dem, was ich von der Frage bekam, ist, dass OP eine Zeichenkette erhält, in der alle durch Komma (',') getrennten Elemente in erwarteter Zeichenkette erscheinen sollten. Die Bestellung wird nicht gepflegt. Diese Antwort bezieht sich auf diesen Fall. –

1

Sie immer kann es tun, dass ein wenig dumme Art:

String actual = "10684 ANNA MARIE DR, GLEN ALLEN, VA, APT 111, 23060"; 
String[] arr = actual.split(", "); 
String result = arr[0] + ", " + arr[3] + ", " + arr[1] + ", " + arr[2] + " " + arr[4]; 
+0

Wenn die "tatsächlichen" Strings immer in der gleichen Reihenfolge sind, dann wäre dies die direkte Lösung. Aber OP hat das noch nicht wirklich geklärt. – domsson

0

Im Gegensatz zu anderen vorgeschlagen, dass eine Aufspaltung von , ist, Arrays werden nicht gleich sein.

VA und 23060 werden zwei verschiedene Elemente ergeben, während in der erwarteten String sie ein einzelnes Element sind.

Eine Klärung von OP ist erforderlich.

0
String actualArray[] = actual.split(","); 
int i = 0; 

String finalStr = actualArray[i] +","+actualArray[i+3]+","+actualArray[i+1]+","+actualArray[i+2]+actualArray[i+4]; 
System.out.println(finalStr); 
+0

Ist das nicht genau dasselbe wie [Мотя antworten] (http://stackoverflow.com/a/42949334/3316645)? – domsson

+0

Nein. Es ist nicht dasselbe ... – VNT