转义字符''不显示在 System.out.println() 中,而是显示在返回值中



在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());

最新更新