java - 如何替换字符串中第二次出现的字符? ( java )

标签 java

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/

相关文章:

java - 如何避免违反 Oracle DB 中插入和更新的约束

java - 自定义推土机映射

javascript - 如果从服务器发送到客户端,HTML 字符串会获得额外的换行符

java - 使用 XPath 读取站点地图

同一类的Java组合和聚合?

java - 如何为同一个自定义信息窗口提供不同的事件

java - osgi-karaf-多个版本的服务和 Camel 路线

java - 使用链表上的递归进行快速排序

java - 在找到的模式之间拆分字符串

java - SWT 堆积条形图显示总值