首页 > 解决方案 > String replace() 在 Java 中返回额外的空间

问题描述

考虑:

System.out.println(new String(new char[10]).replace("\0", "hello"));

有输出:

hellohellohellohellohellohellohellohellohellohello 

但:

System.out.println(new String(new char[10]).replace("", "hello")); 

有输出:

hello hello hello hello hello hello hello hello hello hello

这些额外的空间是从哪里来的?

标签: javastringreplacechar

解决方案


它不是一个空间。这是您的 IDE/控制台显示 默认填充的\0字符的方式。new char[10]

你没有用\0任何东西替换,所以它保持在字符串中。相反,.replace("", "hello")您只替换空字符串""。重要的是 Java 假设它""存在于:

  • 字符串的开头,
  • 字符串的结尾,
  • 和每个字符之间

因为我们可以得到"abc"

"abc" = "" + "a" + "" + "b" + "" + "c" + ""`;
      //^          ^          ^          ^

现在.replace("", "hello")用 替换其中的每一个"""hello"因此对于长度为 10 的字符串,它将放置额外的11 hello s(不是10),而无需修改\0,这将显示在您的输出中,如空格。


也许这会更容易掌握:

System.out.println("aaa".replace("", "X"));
  • ""让我们用 as表示每个|。我们会得到"|a|a|a|"(注意有 4 个|
  • 因此替换""X将导致"XaXaXaX"(但在您的情况下,而不是a您的控制台将\0使用看起来像空格的字符进行打印)

推荐阅读