2016-12-12 3 views
1

Ist es möglich, 2 String wie folgt zu vergleichen.Wie 2 Aussagen in Java zu vergleichen

String test1 = "foo bar abc"; 
String test2 = "bar abc foo"; 

Typischerweise ist kein String equals in Java.

Ich denke, ArrayList oder zu verwenden, indem Sie Zeichenfolge durch Leerzeichen aufspalten und vergleichen.

Gibt es noch andere Methoden? welcher ist besser?

Ich möchte foo bar abc und bar abc foo gleich beantworten. Ich möchte wissen, ob dieselben Wörter in beiden vorkommen oder nicht.

+0

was möchten Sie vergleichen? die Wörter? – ItamarG3

+1

Ja und dann verwenden Sie eine für jede Schleife und überprüfen Sie, ob Array2 enthält jedes Wort von Array1 – XtremeBaumer

+2

Wörter teilen und sortieren. Vergleiche Arrays sind die gleichen –

Antwort

3

Wenn die Saiten Sätze von Wörtern (dh Sammlungen ohne Duplikate) darstellen, wäre die natürliche Lösung sein Sets zu verwenden :

String test1 = "foo bar abc"; 
    String test2 = "bar abc foo"; 

    HashSet<String> set1 = new HashSet<>(Arrays.asList(test1.split(" "))); 
    HashSet<String> set2 = new HashSet<>(Arrays.asList(test2.split(" "))); 

    System.out.println(set1.equals(set2)); 
+1

Und was, wenn 'test2 =" bar abc abc bar foo foo "'? Sollte dies wahr oder falsch im Vergleich zu Test 1 sein? –

+0

Diese Frage sollte an das OP gerichtet werden. Ich schätze, er hält sie in diesem Fall für gleich. Aber ich kann hier falsch liegen ... –

+0

Dem stimme ich zu - es ist nur erwähnenswert. Technisch sind die gleichen Wörter da, also wenn Duplikate nicht wichtig sind, ist das in Ordnung –

1

Sie können aus jeder Zeichenfolge eine Liste erstellen, indem Sie beide Zeichenfolgen in separate Wörter aufteilen (mit Regex).
Dann können Sie überprüfen, ob die zweite Liste enthält alle Werte, die in der ersten Liste sind:

String test1 = "foo bar abc"; 
String test2 = "bar abc foo"; 
List<String> list1 =Arrays.asList(test1.split("\\s+")); 
List<String> list2 =Arrays.asList(test2.split("\\s+")); 
if(!list2.containsAll(list1)) 
    return false;//or print out "false", whichever suits you 
+0

Downvoter bitte erarbeiten – ItamarG3

+1

Ich bin nicht downvoter, aber ich denke, weil Sie nur Code ohne Erklärung gegeben haben. –

+0

@ cricket_007 bearbeiteter Code ... Ich habe komplett vergessen, eine Erklärung hinzuzufügen O.O – ItamarG3

0

Das eine von vielen Möglichkeiten ist ist:

import java.util.Arrays; 

(...) 

String test1 = "foo bar abc"; 
String test2 = "bar abc foo"; 

if (Arrays.asList(test1.split("\\s+")).containsAll(Arrays.asList(test2.split("\\s+")))) { 
    return true; 
} else { 
    return false; 
} 
2

Sie zwei Strings aufgeteilt, sortieren Arrays führen und vergleichen Sie.

public static void main(String[] args) { 

    String test1 = "foo bar abc"; 
    String test2 = "bar abc foo"; 

    System.out.println(method(test1, test2)); 
} 


private static boolean method(String test1, String test2){ 
    String[] tokens1 = test1.split(" "); 
    String[] tokens2 = test2.split(" "); 

    Arrays.sort(tokens1); 
    Arrays.sort(tokens2); 

    return Arrays.equals(tokens1, tokens2); 
}