private String theLetters = "_ _ _ _ _\n";
StringBuilder myName = new StringBuilder(theLetters);
for(char e : theSecretWord.toLowerCase().toCharArray())
{
if(e == theUsersGuess.charAt(0))
{
int index = theSecretWord.indexOf(e) * 2;
myName.setCharAt(index, theUsersGuess.charAt(0));
theLetters = myName.toString();
}
}
出于某种原因,这只会替换字符串 theSecretWord 中第一次出现的字母,而不是第二次出现的字母,即使每个循环都会遍历每个字符并相应地在 theLetters 中替换它。我不明白为什么它不会替换多次出现的字母。
我认为这是因为循环一旦找到匹配的字母就会停止,尽管它不应该停止。
最佳答案
private String replaceOccurrence(String text, String replaceFrom, String replaceTo, int occurrenceIndex)
{
StringBuffer sb = new StringBuffer();
Pattern p = Pattern.compile(replaceFrom);
Matcher m = p.matcher(text);
int count = 0;
while (m.find())
{
if (count++ == occurrenceIndex - 1)
{
m.appendReplacement(sb, replaceTo);
}
}
m.appendTail(sb);
return sb.toString();
}
例如,如果您想将第二次出现的“_”替换为“A”,则:
String theLetters = "_ _ _ _ _\n";
String replacedText = replaceOccurrence(theLetters, "_", "A", 2);
结果:_ A _ _ _
关于java - 如何替换字符串中第二次出现的字符? ( java ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21298187/