如果我通过eclipse中的运行配置将一些变量作为环境变量传递,那么它会自动转义特殊字符。我想传递一些'\ n'和'\ r'字符用于某些格式化,但是当我通过调试在代码中检查它时,它们会自动转换为'\\ n'和'\\ r'。
String value= System.getenv("envPassed");
System.out.println("envPassed= "+value);
因此,如果在运行配置中将envPassed指定为'hi \ n \ rhello',那么它将被转换为'hi \\ n \\ r'并输出打印为
hi\n\rhello
而输出应该是
hi
hello
我们有办法让它发挥作用吗?
答案 0 :(得分:2)
\n
和\r
之类的序列只有在您记录此类行为的情况下才会转换为控制字符,例如Java源代码中的String
文字。
环境变量或字符串替换的Eclipse对话框不执行此类转换,而是按输入的方式传输字符串。这可以通过读取和打印环境变量值的Java程序打印出您输入的内容来说明。
Java调试器的一个特殊属性是在检查时显示String
内容,就像等效的Java源代码文字一样。这是转换发生的唯一地方。
似乎Eclipse开发人员并不打算支持这些变量的多行字符串。他们似乎主要针对路径字符串和类似的。但是,我找到了一种方法,如何插入换行符。使用${system_property:line.separator}
,这将读取名为line.separator
的Java系统属性,该属性位于list of always present system properties。
答案 1 :(得分:-1)
你可以在操作之前预先处理字符串...如果你想要安全,你可以使用一些正则表达式来确保它总是能够工作:
String value = System.getenv("MyEnv");
if ( value != null ) {
value.replaceAll("\\\\n(\\\\r)?", "\n" );
}
System.out.println( value );
请注意,四个反斜杠不是错误的 - 这是必要的,因为String.replaceAll()将模式字符串解释为字符串和正则表达式。
希望这有帮助!