【问题标题】:What is the difference between string.replace(ch,'\0') and string.replace(""+ch,"")string.replace(ch,'\0') 和 string.replace(""+ch,"") 有什么区别
【发布时间】:2021-07-16 11:21:30
【问题描述】:
class pola {
    public static void main(String[] args) {
        String name = "fast and furious";
        char s = 'f';
        System.out.println(name.replace(s, '\0'));    //---->line 1
        System.out.println(name.replace("" + s, "")); //---->line 2
    }
}

12 行有什么区别?

【问题讨论】:

  • 为什么不直接阅读Java docsthisthis 会清楚地告诉你有什么区别。

标签: java string replace


【解决方案1】:

如果您打印出每个字符数组,您可以更清楚地看到,其中f 字符被删除,而在第二个中它们被\0 替换:

Arrays.toString(name.replace("" + s, "").toCharArray())
=> "[a, s, t,  , a, n, d,  , u, r, i, o, u, s]"

Arrays.toString(name.replace(s, '\0').toCharArray())
=>"[\000, a, s, t,  , a, n, d,  , \000, u, r, i, o, u, s]"

【讨论】:

    【解决方案2】:

    null 字符仍然是一个字符,而 空字符串 不包含任何字符——这就是简而言之的区别。

    【讨论】:

      【解决方案3】:

      Java docs 几乎总是最好的起点,每当您对 API 设计/细节有疑问时。

      replace​(char oldChar, char newChar)

      返回一个字符串,该字符串是用 newChar 替换此字符串中所有出现的 oldChar。

      replace​(CharSequence target, CharSequence replacement)

      用指定的文字替换序列替换此字符串中与文字目标序列匹配的每个子字符串。替换从字符串的开头到结尾进行,例如,将字符串“aaa”中的“aa”替换为“b”将导致“ba”而不是“ab”。

      【讨论】:

        【解决方案4】:

        第一行调用replace(char, char),第二行调用replace(CharSequence, CharSequence)

        这两种方法之间的一个很大区别是,第一种方法只能对char 值进行一对一的替换(即,每次出现的一个字符都被恰好替换为另一个字符),而第二种方法可以用另一个任意长的字符串替换任意长的字符串。

        在你的情况下:

        • 第一次调用将每个 f 替换为一个空字符 \0,有效地将每个 f 替换为一个不可打印的字符。
        • 第二次调用将每个 1 字符的字符串 "f" 替换为 0 字符的 "",从而有效地删除了所有 f 字符。

        【讨论】:

        • 看有什么区别:比较结果字符串的长度。
        • 非常感谢。我知道两者都替换了字母“f”。我想知道这两种方法对字符串长度有什么影响。
        • @i_am_ssr:从我的回答中应该很明显:一个保持相同的长度,因为它只进行一对一的替换,另一个删除所有f,从而减少了长度。
        • 非常感谢您的回答,我对长度部分感到困惑。
        • @i_am_ssr 注意:不要期望它的行为会像在 C 中那样(即,在字符串中间添加 '\0' 会有效地截断它)。如果您对此表示怀疑,Java 字符串不会那样工作。
        猜你喜欢
        • 2020-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-16
        • 1970-01-01
        • 2013-12-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多