java - 获取字符串 "asdxyz\n"并用 ascii 值替换\n

标签 java apache-flex compiler-construction

我不想将其替换为/u000A,不希望它看起来像“asdxyz/u000A”

我想用实际的换行符替换它。

最佳答案

基于您对 Natso's answer 的回复,看来你对正在发生的事情有一个根本性的误解。两个字符序列 \n 不是换行符。但这就是我们在代码中表示该字符的方式,因为实际的字符很难看到。编译器知道,当它在字符串文字的上下文中遇到该两个字符序列时,它应该将它们解释为真正的换行符,其 ASCII 值是 10。

如果您将该两个字符序列打印到控制台,您将看不到它们。相反,您会看到光标前进到下一行。这是因为编译器已经用换行符替换了这两个字符,所以它实际上是发送到控制台的换行符。

如果您的程序输入包含反斜杠和小写N,并且您希望将它们转换为换行符,则 Zach's answer可能就足够了。但是,如果您希望程序允许输入中存在真正的反斜杠,那么您需要某种方式让输入指示反斜杠后跟小写 N 确实应该是这两个字符。通常的方法是在反斜杠前面加上另一个反斜杠,转义它。如果您在这种情况下使用 Zach 的代码,最终可能会将三字符序列 \\n 转换为由反斜杠后跟换行符组成的两字符序列。

读取使用反斜杠转义的字符串的可靠方法是从输入的开头开始一次解析一个字符。将字符从输入复制到输出,除非遇到反斜杠。在这种情况下,还要检查下一个字符是什么。如果是另一个反斜杠,请将单个反斜杠复制到输出。如果它是小写N,则将换行符写入输出。如果是任何其他角色,那么无论您定义什么都是正确的。 (示例包括将整个输入视为错误而拒绝,假装反斜杠不存在,以及省略反斜杠和后面的字符。)

如果您尝试观察调试器中变量的内容,调试器可能会检测到换行符,并将其转换回为两个字符序列\n。因此,如果您正在单步执行代码并试图找出其中的内容,那么您可能会成为调试器帮助的受害者。在大多数情况下,这确实是有帮助的。程序员通常想确切地知道字符串中有哪些字符;他们不太关心这些角色将如何出现在屏幕上。

关于java - 获取字符串 "asdxyz\n"并用 ascii 值替换\n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/535227/

相关文章:

flash - 如何使用 BitmapData.fillRect()?

apache-flex - 如何在自定义 Flex 4 组件中定义自定义 'contentGroups'?

apache-flex - 如何从 Flex 中基于对象的关联数组中删除所有值?

c++ - 类型检查中的纯名称等效

Java检查鼠标按钮状态

java - AdMob - 错误膨胀类 com.google.gms.AdView

java - 为什么在 Java import 语句中使用 * 是不好的?

java - 汉诺塔 - java

c++ - 为什么 "int *find(const vector<int> &vec, int value)"会给我一个无效的转换错误?

language-agnostic - 我将如何手动编写复杂的公式解析器?