取字符串“asdxyz \ n”并将\ n替换为ascii值

时间:2009-02-11 02:48:59

标签: java flex compiler-construction

我不想用/ u000A替换它,不要让它看起来像“asdxyz / u000A”

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

3 个答案:

答案 0 :(得分:6)

只需使用String.replace()

newtext = text.replace("\\n", "\n");

答案 1 :(得分:6)

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

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

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

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

如果您正在尝试观察调试器中变量的内容,则调试器可能会检测到新行字符将其返回转换为双字符序列{{1 }}。因此,如果您正在逐步查看代码中的内容,那么您可能会成为调试器有用的牺牲品。在大多数情况下,它确实很有帮助。程序员通常想要确切地知道字符串中的字符是什么;他们不太关心这些角色在屏幕上的显示方式。

答案 2 :(得分:0)

使用“(char)(10)”代码生成真正的ascii值。

newstr = oldstr.replaceAll("\\n",(char)(10));

// -or-

newstr = oldstr.replaceAll("\\n","" + ((char)(10)));

//(已经有一段时间了)