【问题标题】:How to compare 2 statements in java如何比较java中的2条语句
【发布时间】:2017-04-27 09:47:49
【问题描述】:

是否可以像这样比较 2 个字符串。

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

通常不是 java 中的字符串 equals

我正在考虑使用ArrayListarray 按空格分割字符串并进行比较。

还有其他方法吗? 哪个更好?

我要回答 foo bar abcbar abc foo 是一样的。我想知道两者中是否出现相同的单词。

【问题讨论】:

  • 你想比较什么?单词?
  • 是的,然后对每个循环使用 a 并检查 array2 是否包含 array1 中的每个单词
  • 分词和排序。比较数组是否相同
  • @cricket_007 我认为排序并不是真正需要的。但它可能更有效。
  • @cricket_007 他只是说他想知道array2是否包含array1中的每个单词。他没有说它不能容纳更多。所以检查相等性可能不是正确的事情......顺便说一下,List 接口有一个不错的 containsAll 方法;)

标签: java arrays string arraylist


【解决方案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

【讨论】:

  • 我不是反对者,但我认为是因为您只给出了代码而没有任何解释。
  • @cricket_007 编辑代码...我完全忘记添加解释 O.O
  • @Simze 现在好点了吗? :P
【解决方案2】:

如果您的字符串表示单词集(即没有重复的集合),自然的解决方案是使用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));

【讨论】:

  • 如果test2 = "bar abc abc bar foo foo" 怎么办?与测试 1 相比,返回 true 还是 false?
  • 该问题应直接提交给 OP。我猜他认为在这种情况下他们是平等的。但我在这里可能是错的......
  • 我同意 - 不过值得一提。从技术上讲,相同的词在那里,所以如果重复不重要,这很好
  • 同意。添加了说明。
【解决方案3】:

这是众多可能性之一:

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

【讨论】:

    【解决方案4】:

    您可以拆分两个字符串,对结果数组进行排序和比较。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      • 2016-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多