在for循环中一次替换字符串中的所有字符

Posted

技术标签:

【中文标题】在for循环中一次替换字符串中的所有字符【英文标题】:Replacing all characters in a string at once in a for loop 【发布时间】:2020-10-16 02:22:11 【问题描述】:

我正在学习 Java,我有以下方法可以更改字符串中的特定字母:

replaceLetter("The quick brown fox jumps over the lazy dog");

        public static void replaceLetter(String string)
        string = string.toLowerCase();
        for (int i = 0; i < string.length(); i++)
            if (string.charAt(i) == 'o')
//              System.out.println("inside if " + i);
//              System.out.println("Char at " + string.charAt(i));
                System.out.println(string.replace(string.charAt(i), '*'));
                break;
            
//            System.out.println("Outside if " + i);
        
    

我不明白为什么要一次更改所有字母“o”,而不是像我认为的那样一个一个地更改。循环在“if 语句”之外循环 12 次,然后进入语句内部并更改与大小写“o”匹配的所有字符。既然条件是“string.charAt(i)”,那不应该一一改变吗?它不应该改变匹配大小写的第一个字符然后跳出循环吗?

【问题讨论】:

【参考方案1】:

因为这就是 String#replace(char, char) 的作用。

来自Javadoc:

返回由替换 all 出现的新字符串 此字符串中的 oldChar 与 newChar。

如果您只想一次替换一个字符,请使用String#replaceFirst(char, char)

【讨论】:

【参考方案2】:

引用javadoc for replace,它(强调我的):

用指定的文字替换序列替换此字符串中与文字目标序列匹配的每个子字符串。

听起来您正在寻找 replaceFirst 来一次替换一个字符的出现。

【讨论】:

OP 不要使用你链接或引用的函数【参考方案3】:

您可以使用 StringBuilder 的 setCharAt,因此您的 sn-p 将如下所示:

public static String replaceLetter(String string)

    StringBuilder stringBuilder = new StringBuilder(string.toLowerCase());
    for (int i = 0; i < stringBuilder.length(); i++)
        if (stringBuilder.charAt(i) == 'o')
            stringBuilder.setCharAt(i, '*');
            break;
        
    
    return stringBuilder.toString();

此外,字符串在 Java 中是不可变的。您需要创建一个替换字符的新字符串。

【讨论】:

【参考方案4】:

string.replace(char a, char b)char b 替换string 中出现的所有char a。所以你可能想改用string.replaceFirst

【讨论】:

以上是关于在for循环中一次替换字符串中的所有字符的主要内容,如果未能解决你的问题,请参考以下文章

如何在js中一一替换所有相同的字符? [复制]

js的replace如何全部替换目标字符串

为啥我不能在这样的字符串上替换字符?

Android Kotlin 用 for next 循环替换 while

用 html/jquery 中的一个 JSON 字符串替换许多数据标签 [重复]

在Windows批处理中的循环中使用变量替换另一个变量中的子字符串