在java中查找两个多集的交集
for(i=0;i<m1.length();i++)
for(j=0;j<m2.length();j++)
if(m1.charAt(i)==m2.charAt(j)){
intersection=intersection+m1.charAt(i);
m2.charAt(j)=' ';
}
System.out.println(intersection);
} while(devam==false);
}
}
这是我的密码。我们不允许使用方法或数组,我们只是初学者。我的代码在m2.charAt(j)=' ';
点给出了一个错误。我写这条线是因为,当我们找到一个交点时,我们不应该再检查那个元素。你能帮忙吗
# 1 楼答案
不能使用修改字符串的内容
改为这样做
请注意,replace()将替换字符串中与第一个参数相等的第一个字符。我假设,由于字符串表示一个集合,因此不会是重复的字符。如果有,并且您想替换所有这些,只需使用replaceAll()
# 2 楼答案
正如Brian所说,java中的字符串是不可变的。这意味着您不能通过像
m2.charAt(j)=' '
这样的方法调用进行赋值。这意味着您必须使用另一种方法来跟踪是否已找到角色您可以将它添加到
intersection
,在检查字符时,使用intersection.indexOf(char c)
确保它不在intersection
中,如果返回-1,则它不在字符串中编辑:
抱歉,没有考虑到输出应该是多集。如果输出是一个集合,上述方法解决了这个问题
您可以在m2上使用
replaceFirst(String searchFor, String replacement)
来删除它。可能是这样的:所以如果m1='1235'和m2='1421'
第一关:在“14 2 1”中查找1
第二关:在'421'中寻找1
第三关:在'42'中寻找2
第四关:在'4'中寻找3个
第五关:在'4'中查找5
正在返回“11 2”
请注意,它将变量增加2以考虑空格。如果我们假设两个字符串的形式为“a”,且“a”仅为单个字符,则这仅为。如果存在长度超过一位数的数字或字符,则必须跳过空白并以不同的方式解释字符串,而不仅仅是逐个字符查看
如果我们可以做出这些假设,那么在执行这个循环之前,明智的做法是使用String
trim
方法iem1 = m1.trim()
修剪m1的尾随和前导空格