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)=' ';
处出错。我写了那条线,因为当我们找到一个十字路口时,我们不应该再检查那个元素。你能帮忙吗?
答案 0 :(得分:1)
正如Brian所说,java中的字符串是不可变的。这意味着您无法通过类似m2.charAt(j)=' '
的方法调用进行分配。这意味着您必须使用其他方式来跟踪您是否已找到该角色。
您可以将其添加到intersection
,并在检查字符时确保使用intersection
不在intersection.indexOf(char c)
中,如果返回-1则不在串。
编辑:
很抱歉没有考虑到输出应该是一个multiset。如果输出是一组,上面解决了问题。
您可以在m2上使用replaceFirst(String searchFor, String replacement)
删除它。它会是这样的:
for( int i =0; i < m1.length(); i+=2)
{
if(m2.indexOf(m1.charAt(i)) != -1)
{
intersection = intersection + m1.charAt(1) + " ";
m2 = m2.replaceFirst(new String(m1.charAt(i)), "");
}
}
因此,如果m1 ='1 1 2 3 5'且m2 ='1 4 2 1',
第一遍:在'1 4 2 1'中寻找1
第二遍:在'4 2 1'中查找1
第三遍:在'4 2'中寻找2
第四遍:在'4'中寻找3
第五遍:在'4'中查找5
返回'1 1 2'
请注意,它将变量递增2以考虑空格。如果我们假设两个字符串的格式为'a a a a a a a',而'a'只是一个字符,则仅。如果有超过一位数字的数字或字符,那么你必须跳过空格并以不同的方式解释字符串,而不是仅仅逐个字符地查看它。
如果我们可以做出这些假设,那么在执行此循环之前使用String trim
方法(即m1 = m1.trim()
)修剪尾随和前导空格的m1是明智的。
答案 1 :(得分:1)
您无法使用
修改字符串的内容m2.charAt(j)=' ';
改为
m2 = m2.replace(m2.charAt(j), ' ');
请注意,replace()将替换字符串中的第一个字符,该字符等于第一个参数。我假设,由于字符串代表一个集合,不会重复字符。如果有,并且您想要替换所有这些,请使用replaceAll()代替。