比较java中的字符串和编辑

时间:2015-04-05 17:13:27

标签: java string

我想用Java比较两个字符串。

String s1 = "John James Joanne Catherine Paul Steve";
String s2 = "Ian John Catherine Paul Mike Tim Ray";

我所追求的是第三个字符串,它将s1s2进行了比较,并删除了s1中的所有匹配项。所以我留下的将是“James Joanne Steve”。字符串可以是任何混合顺序和长度。

有人知道如何做到这一点吗?

5 个答案:

答案 0 :(得分:2)

  1. 拆分两个字符串以提取各种名字。
  2. 创建两个Set<String>以包含每个原始字符串的名字
  3. 使用Set.removeAll()删除第一组中第二组的所有元素。

答案 1 :(得分:0)

我会使用带有分隔符的StringTokenizer / Scanner并迭代比较值的字符串。如果一个&#34;令牌&#34;在s1中找不到s2,然后我会把它放在一个新的字符串中(带有StringBuilder个对象)

这种方法可能会更慢,但内存成本更低(与使用Set的解决方案相比)。

答案 2 :(得分:0)

试试这段代码,这会对你有帮助,

String s1 = "John James Joanne Catherine Paul Steve";
String s2 = "Ian John Catherine Paul Mike Tim Ray";

Scanner inp1 = new Scanner(s1);

String output = "";

while (inp1.hasNext()) {
    String temp = inp1.next();
    int flag = 0;
    Scanner inp2 = new Scanner(s2);
    while (inp2.hasNext()) {
        if (temp.equals(inp2.next())) {//comparing one string of s1 with every string of s2
            flag = 1;
            break;
        }
    }
    inp2.close();
    if (flag == 1) {
        output += temp + " ";
    }
}
System.out.println(output);
inp1.close();

答案 3 :(得分:0)

Rigthy由JB Nizet说,但如果你想不使用任何集合或构建方法,那么这里是代码: -

    String s1 = "John James Joanne Catherine Paul Steve";
    String s2 = "Ian John Catherine Paul Mike Tim Ray"; 

    String s3="";
    int checker=0;

    String[] s1_=s1.split(" ");
    String[] s2_=s2.split(" ");

    for(int i=0;i<s1_.length;i++)
    {
        for(int j=0;j<s2_.length;j++)
        {
            if(!s1_[i].equals(s2_[j]))
            {
                checker=checker+1;
            }
        }
        if(checker==s2_.length)
        {
            s3=s3+s1_[i];
        }
        checker=0;
    }

    System.out.println(s3);

希望它有所帮助。祝你有个美好的一天!

答案 4 :(得分:0)

您可以使用Pattern regular expression来实现这一目标。

试试这段代码:

String s1 = "John James Joanne Catherine Paul Steve";
String s2 = "Ian John Catherine Paul Mike Tim Ray";

//construct the regex for the s2 words
String[] wordsS2 = s2.split(" ");
String regex ="\\b(?:";

for ( String w : wordsS2)
    regex += w +"|";

regex += ")\\b\\s*";

//replace all matches with an empty string in s1
Pattern matches= Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
Matcher m = matches.matcher(s1);
String s3 = m.replaceAll("");

//print the result
System.out.println(s3);