2016-12-12 19 views
1

是否可以像这样比较2个字符串。如何比较java中的2条语句

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

在java中通常不是字符串equals

我想用ArrayListarray通过空格分割字符串并进行比较。

是否有其他方法可用? 哪一个更好?

我想回答富巴ABC酒吧ABC富是相同的。我想知道两个词是否出现在同一个词中。

+0

你想比较什么?这个词? – ItamarG3

+1

是的,然后使用每个循环,并检查array2是否包含array1中的每个单词 – XtremeBaumer

+2

分词和排序。比较数组是相同的 –

回答

3

如果你的字符串表示词的集合(即没有重复的集合),自然的解决方案是使用Sets

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

如果'test2 =“bar abc abc bar foo foo”'?如果与测试1相比,这应该是真的还是假? –

+0

该问题应该针对OP。我想他在这种情况下认为他们是平等的。但我在这里可能是错的... –

+0

我同意 - 但这只是值得一提的。从技术上说,同样的词在那里,所以如果重复不重要,这是好的 –

1

通过将两个字符串拆分为不同的单词(使用正则表达式),您可以从每个字符串中创建一个列表。
然后你可以检查第二列表包含在第一列表中的值:

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请详细说明 – ItamarG3

+1

我不是downvoter,但我认为,因为你只给出没有任何解释的代码。 –

+0

@ cricket_007编辑的代码...我完全忘了添加一个解释O.O – ItamarG3

0

这是许多可能性之一:

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

您可以分割两个字符串,排序结果数组和比较他们。

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