在Java中,当我用转义字符替换String
中的字符时,这些字符会显示在返回值中,尽管根据System.out.println
它们不存在。
String[][][] proCategorization(String[] pros, String[][] preferences) {
String str = "wehnquflkwe,wefwefw,wefwefw,wefwef";
String strReplaced = str.replace(",","",""); //replace , with ","
System.out.println(strReplaced);
控制台输出为:wehnquflkwe","wefwefw","wefwefw","wefwef
String[][][] array3d = new String[1][1][1]; // initialize 3d array
array3d[0][0][0] = strReplaced;
System.out.println(array3d[0][0][0]);
return array3d;
}
控制台输出为:
Wehnquflkwe
","wefwefw","wefwefw","wefwef
现在返回值为:
[[["Wehnquflkwe\",\"wefwefw\",\"wefwefw\">,\"wefwef"]]]
我不明白为什么出现在返回值中而不是
System.out.println
中。
内存中的字符可以用不同的方式表示。
集成开发环境 (IDE) 具有一个调试器,该调试器选择表示具有包含字符的单个元素的String[][][]
wehnquflkwe","wefwefw","wefwefw","wefwef
作为 Java 引号字符串
"wehnquflkwe","wefwefw","wefwefw","wefwef"
这很有意义,因为您可以复制此字符串并将其粘贴到 Java 代码中而不会造成任何损失。
另一方面,系统的控制台和 IDE 的内置终端仿真器将以正常表示形式输出字符,即没有任何 java 字符串转义字符:
wehnquflkwe","wefwefw","wefwefw","wefwef
作为实验,您可能需要检查其他"特殊"字符会发生什么情况,例如t
(制表符分隔符)或b
(退格符)。这只是冰山一角 - Java 中的字符通常转换为 unicode 点,系统或终端中可用的字体可能支持也可能不支持这些点。IDE 将字符表示为 java 引号字符串的方式允许它无损地表示几乎任何内容;System.out.println的输出更加可变。
>System.out.println
完全按照存储在内存中的String
打印出来。另一方面,当您使用breakpoint
停止应用程序流时,您可以查找值。
大多数 IDE 都显示带有转义字符,以指示它只是一个
String
,在这种情况下不是String[]
,或者如果中间包含n
,则不将String
拆分为两行。
以防万一,您仍然有疑问,我建议打印strReplaced.length()
.这应该允许您逐个计算字符数。
可能的实验:
String s = "my cute n two line String";
System.out.println(s + " length is: " + s.length());