java - 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
这些额外的空间是从哪里来的?
解决方案
它不是一个空间。这是您的 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
使用看起来像空格的字符进行打印)
推荐阅读
- node.js - S3 使用唯一的请求 ID 触发 Lambda 函数两次
- python - 我试图用漂亮的汤来抓取一个网站
- apache-kafka - 如何在 Kafka 中列出正在进行的事务
- python - 如何按行名分组并将它们转换为数据框中的列?
- javascript - React-Query useQuery 是缓存响应
- javascript - 有什么方法可以为选择值设置条件语句?
- swift - 在 PDFPage 上添加注释,导出到 Macbook 时仍可编辑
- sql - 在日期 XYZ 之后首次出现列值的计数表行
- docker - 运行 Docker 容器的“exec 格式错误”错误
- php - 为每组值创建 Div