我刚刚阅读了有关比较“%n”和“\ n”
的问题What's up with Java's "%n" in printf?
答案证实%n可以跨平台使用,而\ n则不是。所以我想知道其他转义字符如\ t,\ b,\',\“,\\ ....它们都是平台相关的,就像\ n?
答案 0 :(得分:1)
\t
\'
\"
和\\
很可能在所有平台上以相同的方式行事,因为它们代表真正的ASCII字符,并且没有多少平台可以做不实现完整的ASCII字符集。
\b
- 这是另一回事。这几乎肯定不会在任何平台上做同样的事情,因为它应该实现BEL控制代码,它本身不是平台通用的。
你希望从问题中获得什么?
补充:似乎\ b退格 - 但仍然不太可能是跨平台的。
补充:至于\ f - 只是不要使用它,因为它可能只会在你更换你的打印机时做一些停止工作的东西 - 如果它真的做了什么的话。
答案 1 :(得分:1)
字符串转义码在所有平台上表示相同的含义。它们映射到指定的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(...)
的第一个参数,或其他符合格式化风格的参数。
答案 2 :(得分:0)
有些平台使用\r\n
作为新行,其他一些\n
。使用%n
将确保在输出中发出正确的新行。
这与字符前面的反斜杠字符无关,以指定您提到的特殊字符。您可以在源代码中使用它。