所以我的程序允许用户输入一个字符串然后删除所有出现的字符。如果字符串中不存在该字符,则应该打印错误消息。现在,我已经创建了一个循环来检查字符串中的每个字符,以创建没有字符的新字符串。我不确定如何创建输入验证循环而不为每个与用户想要删除的字符不匹配的字符打印错误消息。我希望这是有道理的!
以下是我的代码的一部分:
//REMOVE LOOP
System.out.println("Enter the character to remove");
String oldChar = keyboard.nextLine();
while ( indexEnd <= string.length() ) {
String substring = string.substring(indexStart, indexEnd);
indexStart++;
indexEnd++;
}
while ( substring.equals(oldChar) ) {
substring = string.substring(0, indexStart-1);
string = substring + string.substring(indexEnd - 1);
indexStart=0;
indexend=1;
}
}
答案 0 :(得分:1)
在开头添加一个保护条款(支票)。
最好避免使用while循环并编写更具可读性的内容。
public String removeCharacter(String text, String character) {
if(!text.contains(character)) {
throw new IllegalArgumentException("Character " + character + " not found in text " + text);
} else {
return text.replace(character, "");
}
}
答案 1 :(得分:0)
虽然Swifter的答案很棒且更具可读性,但这是另一种选择:
由于我们只是删除了字符,因此我们知道如果结果长度保持不变,则找不到该字符。
public String remove(String text, String character) {
// save the original length because we are going to use it later
var origLength = text.length();
text = text.replace(character, "");
// check new length against original length
// - if they are the same, then 'character' wasn't found
if(origLength == text.length()) {
throw new IllegalArgumentException("Character " + character + " not found.");
}
return text;
}
从技术上讲,这是更高效的,因为只有一个通过字符串(虽然实际上这可以忽略不计)。