我想用Java比较两个字符串。
String s1 = "John James Joanne Catherine Paul Steve";
String s2 = "Ian John Catherine Paul Mike Tim Ray";
我所追求的是第三个字符串,它将s1
与s2
进行了比较,并删除了s1
中的所有匹配项。所以我留下的将是“James Joanne Steve”。字符串可以是任何混合顺序和长度。
有人知道如何做到这一点吗?
答案 0 :(得分:2)
Set<String>
以包含每个原始字符串的名字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);