java - java - 用\n替换换行符
问题描述
我正在编写一个 IDE。假设我有一个字符串上的Hello, World Pascal 程序:
String sourceCode = "program Hello;\nbegin\nwriteln ('Hello, world.');\nend.";
如果我这样做System.out.println(sourceCode);
,输出显示:
program Hello;
begin
writeln ('Hello, world.');
end.
太好了,但我想将新行显示为\n
. 我试过了:
sourceCode = sourceCode.replaceAll(System.lineSeparator(), "\\n");
但随后System.out.println(sourceCode);
输出:
program Hello;nbeginnwriteln ('Hello, world.');nend.
当我期望\n
被展示时:
program Hello;\nbegin\nwriteln ('Hello, world.');\nend.
我怎样才能做到这一点?完整演示:
public class PrintPascalHelloWorld {
public static void main(String[] args) {
String sourceCode = "program Hello;\nbegin\nwriteln ('Hello, world.');\nend.";
System.out.println(sourceCode);
sourceCode = sourceCode.replaceAll(System.lineSeparator(), "\\n");
System.out.println(sourceCode);
}
}
我可以使用Online Java IDE编译和运行它。
解决方案
您使用String.replaceAll(String regex, String replacement)
它作为第一个参数 aString regex
和第二个参数 a String replacement
。
这种方法有一些关于替换的特殊性String
。特别是,如果它包含 a\
或 a $
,它可能不会被解释为文字。
根据 Matcher.replaceAll()
引擎盖下使用的指定String.replaceAll()
:
请注意,替换字符串中的反斜杠 () 和美元符号 ($) 可能会导致结果与将其视为文字替换字符串时的结果不同。如上所述,美元符号可以被视为对捕获的子序列的引用,并且 反斜杠用于转义替换字符串中的文字字符。
在您的情况下,sourceCode.replaceAll(System.lineSeparator(), "\\n")
将转义文字n
字符。
如果要使用replaceAll()
,则应使用复杂的方式,例如:
sourceCode = sourceCode.replaceAll("\n", "\\\\n");
由于您不需要使用正则表达式,因此使用String.replace(CharSequence target, CharSequence replacement)
将 a 替换为CharSequence
另一个并且String
是CharSequence
.
所以你可以调用:
sourceCode = sourceCode.replace("\n", "\\n")
现在将String replacement
其作为文字处理。
另请注意,System.lineSeparator()
当您在文件输出流中写入新行字符不可避免地依赖于操作系统时,这很有意义。as 中包含的行尾
不依赖于操作系统。 \n
String
"program Hello;\nbegin\nwriteln ('Hello, world.');\nend.";
例如在 Windows 上,JVM 8 处理 Windows 换行符 ( \r\n
) 并\n
在标准输出中打印它们时漠不关心。
此代码在 Windows 上:
String sourceCode = "program Hello;\r\nbegin\nwriteln ('Hello, world.');\r\nend.";
System.out.println(sourceCode);
确实产生:
程序你好;
开始
writeln ('你好,世界。');
结尾。
推荐阅读
- android - 如何在组合图表 (MPAndroidChart) 中设置多行 XAxis 值?
- c# - 在构建时转换 Web.config
- android - Android RRO - 覆盖自定义属性
- javascript - 浮动操作按钮未粘在其父元素上
- c++ - AST(抽象语法树)是由语言还是由前端定义的?
- arrays - 大家好,我如何在反应组件上渲染这些成分,而不必通过“strIngredient20”写出“strIngredient1”
- javascript - 如何在 vue 中将这些数据从 console.log(element.faculty_name) 显示到模板?
- javascript - Redux 工具包:未捕获的 TypeError:无法读取未定义的属性(读取“类型”)
- riscv - GCC 上的 RISC-V 程序集 - 为什么会生成冗余 mv 命令?
- python - 为什么 cv2.namedWindow 不起作用?