繁体   English   中英

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

[英]How to replace second occurence of char in a String? (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中第一次出现的字母,而不会替换第二次出现的字母,即使每个循环都经过每个字符并相应地将它们替换为字母也是如此。 我不明白为什么它不能代替一个字母出现多次。

我认为这是因为一旦找到匹配的字母,循环就停止了,即使它没有找到。

我认为这是您正在寻找的代码,

 String word, letter;
        word = "test";
        letter = "t";
        int i = 0;

        i = word.indexOf(letter);

        while (i > -1) {
            // store i in arrayList
            i = word.indexOf(letter, i + 1);}

另一种方式是

 String string1= "Hello";
 int first=string1.indexOf('l');
 String newstr= string1.substring(0, first+1);
 String newstr2= string1.substring(first+1, string1.length()).replaceFirst("l", "k");
 System.out.println(newstr+newstr2);

通过使用StringBuilder,您可以通过以下代码来实现

    String string1= "Hello";
    int first=string1.indexOf('l',string1.indexOf('l')+1);
    StringBuilder SB = new StringBuilder(string1); 
    SB.setCharAt(first, 'k'); 
    System.out.println(SB);
private String replaceOccurance(String text, String replaceFrom, String replaceTo, int occuranceIndex)
{
    StringBuffer sb = new StringBuffer();
    Pattern p = Pattern.compile(replaceFrom);
    Matcher m = p.matcher(text);
    int count = 0;
    while (m.find())
    {
        if (count++ == occuranceIndex - 1)
        {
            m.appendReplacement(sb, replaceTo);
        }
    }
    m.appendTail(sb);
    return sb.toString();
}

例如,如果要将“ _”的第二次出现替换为“ A”,则:

String theLetters = "_ _ _ _ _\n";
String replacedText = replaceOccurance(theLetters, "_", "A", 2);

结果:_ A _ _ _

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM