我刚刚阅读了这个关于比较“%n”和“\n”的问题
答案确认 %n 可以跨平台使用,而 \n 不是。所以我想知道其他转义字符,如 \t 、 \b、 \'、 \"、 \\ ...。它们都像 \n 一样依赖于平台吗?
我刚刚阅读了这个关于比较“%n”和“\n”的问题
答案确认 %n 可以跨平台使用,而 \n 不是。所以我想知道其他转义字符,如 \t 、 \b、 \'、 \"、 \\ ...。它们都像 \n 一样依赖于平台吗?
\t
\'
\"
并且\\
很可能在所有平台上以相同的方式运行,因为它们代表真正的 ASCII 字符,并且没有多少平台不实现完整的 ASCII 字符集。
\b
- 那是另一回事。这几乎肯定不会在任何平台上做同样的事情,因为它应该实现 BEL 控制代码,而 BEL 控制代码本身不是平台通用的。
你希望从你的......问题中得到什么?
补充:似乎 \b 是退格 - 虽然仍然不太可能是跨平台的。
补充:至于 \f - 只是不要使用它,因为它可能只会在您更换打印机时停止工作 - 如果它真的做了什么。
字符串转义码在所有平台上的含义相同。它们映射到指定的 Unicode 代码点,这些代码点又对应于标准的 7 位 ASCII 控制字符。
唯一的(理论上的)问题可能是一些本机字符集,它没有办法表示这些代码点/字符的等价物。我很确定您可以使用 50 多年前的古代 6 位和 5 位字符集。
但是,如果您尝试以平台首选形式输出文本,则需要考虑两件事:
不同的平台使用不同的字符序列作为指定“行尾”的首选方式。(或行分隔符...)
默认的 TAB 停止位置因平台而异。在 Windows 上,它们是每 4 个字符位置,而 Unix / Linux 每 8 个字符。
因此,当您为固定宽度字符显示(例如在“控制台”上)格式化数据时,您需要考虑这些平台依赖性。
当您将这些字符发送到显示器或将它们包含在文件中时,也存在一些不确定性/可变性。但这并不是 Java 的错,也不是 Java 可以解决的任何问题。
相比之下,"%n"
... 在格式字符串的上下文中 ... 表示平台首选行分隔符。因此,在 Linux/UNIX 上它意味着"\n"
,在 Windows 上它意味着"\r"
,在 Mac 上它意味着"\r\n"
. 请注意,这仅适用于格式字符串;即 的第一个参数String.format(...)
,或其他执行该格式格式的参数。
一些平台\r\n
用作新线,另一些平台使用\n
. 使用%n
将确保在输出中发出正确的新行。
这与字符前面的反斜杠字符无关,以指定您提到的特殊字符。随意在您的源代码中使用它。