我的目标是打印出2个字母相同的名称,但名称中只有一个字母相同。例如,小溪将被印刷为布鲁克,而米歇尔将被印刷为米歇尔。我的代码有什么问题?
for(int a = 0; a < word_1.length(); a++)
{
mychar = word_1.charAt(a);
for(int c = 1; c <word_1.length(); c++)
{
mychar_2 = word_1.charAt(c);
if(mychar == mychar_2)
{
word_3 = word_3 + "";
}
else
{
word_3 = word_3 + mychar;
}
}
}
System.out.println(word_3);
答案 0 :(得分:-1)
更好的问题是“什么是正确的代码”。基本上,这个想法看起来像是遍历所有字母,然后遍历所有匹配项。这还不错,我们可以稍微更改您的代码以使其起作用(请参见评论):
for(int a = 0; a < word_1.length(); a++)
{
char mychar = word_1.charAt(a);
// flag for matching letters
Boolean found = false;
// you go through only previous characters!
for(int c = 0; !found && c < a; c++)
{
char mychar_2 = word_1.charAt(c);
if(mychar == mychar_2)
{
found = true;
}
}
// here you add character if no match found
if(!found) {
word_3 = word_3 + mychar;
}
}
这是学术编码的一种好方法,但是在实际项目中,如果您处理大量单词,则必须考虑基于Map的解决方案以保留所有现有字母,并且每个单词仅迭代一次。或者,您可以在众多Java库中搜索某些方法来完成这项工作
答案 1 :(得分:-1)
这可以解决问题:
String testWord = "brook";
List<String> testSet = new ArrayList<String>();
for (int i = 0; i < testWord.length(); i++) {
if (!testSet.contains(String.valueOf(testWord.charAt(i)))) {
testSet.add(String.valueOf(testWord.charAt(i)));
}
}
StringBuilder builder = new StringBuilder();
for (Object s : testSet.toArray()) {
builder.append((String) s);
}
String str = builder.toString();
System.out.println(str);