【发布时间】:2017-06-12 19:59:28
【问题描述】:
我对代码感到困惑
public class StringReplaceWithEmptyString
{
public static void main(String[] args)
{
String s1 = "asdfgh";
System.out.println(s1);
s1 = s1.replace("", "1");
System.out.println(s1);
}
}
输出是:
asdfgh
1a1s1d1f1g1h1
所以我的第一个意见是字符串中的每个字符在两边都有一个空字符串""。但如果在'a'(在字符串中)之后是这种情况,那么输出的第二行应该有两个'1'(一个用于'a'的结尾,第二个用于's'的开始)。
现在我检查了这些链接In Java, is a String an array of chars? 和String representation in Java 中的字符串是否表示为char[],我得到的答案是YES。
所以我尝试将空字符 '' 分配给 char 变量,但它给了我一个编译器错误,
无效的字符常量
当我在char[] 中尝试时,相同的过程会产生编译器错误
char[] c = {'','a','','s'}; // CTE
所以我对三件事感到困惑。
- char[] 如何表示空字符串?
- 为什么我得到上述代码的输出?
- 第一次初始化时,字符串 s1 在 char[] 中如何表示?
抱歉,如果我的问题的任何部分有误。
【问题讨论】:
-
我会从
String#replaceAll预料到这一点,但不会从String#replace得到这个 -
@TimBiegeleisen 刚刚测试过,它实际上只用
String#replace产生了这个结果 -
"空字符串的表示方式" -
char[] empty = {}; -
IMO 询问字符串中有多少个空字符串有点像除以零。
-
我很惊讶它恰好插入了一个
1而不是零。毕竟"ab" == "a" + "" + "b" == "a" + "" + "" + "b"等等;所以说它们之间有 1 空字符串似乎......任意。