0

我刚刚阅读了这个关于比较“%n”和“\n”的问题

printf 中 Java 的“%n”是怎么回事?

答案确认 %n 可以跨平台使用,而 \n 不是。所以我想知道其他转义字符,如 \t 、 \b、 \'、 \"、 \\ ...。它们都像 \n 一样依赖于平台吗?

4

3 回答 3

1

\t \' \"并且\\很可能在所有平台上以相同的方式运行,因为它们代表真正的 ASCII 字符,并且没有多少平台不实现完整的 ASCII 字符集。

\b- 那是另一回事。这几乎肯定不会在任何平台上做同样的事情,因为它应该实现 BEL 控制代码,而 BEL 控制代码本身不是平台通用的。

你希望从你的......问题中得到什么?

补充:似乎 \b 是退格 - 虽然仍然不太可能是跨平台的。

补充:至于 \f - 只是不要使用它,因为它可能只会在您更换打印机时停止工作 - 如果它真的做了什么。

于 2013-05-02T09:10:55.910 回答
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(...),或其他执行该格式格式的参数。

于 2013-05-02T09:20:10.863 回答
0

一些平台\r\n用作新线,另一些平台使用\n. 使用%n将确保在输出中发出正确的新行。

这与字符前面的反斜杠字符无关,以指定您提到的特殊字符。随意在您的源代码中使用它。

于 2013-05-02T09:12:58.793 回答