我有一个noob问题,但我无法弄明白。
我想从命令行发送一个字符串,其中多行由' \ n'
分隔public class Test {
public static void main(String args[]){
System.out.println(args[0]);
}
}
我和
一起跑java -jar test.jar 'te\nst'
我期待结果
te
st
但我正在
tenst
我正在使用Java 7并在Ubuntu中运行。
答案 0 :(得分:1)
我通常不会将此类事件作为VM参数传递。我可能会将它传递给一个文件(如别处所述),或者通过stdin。如果您通过heredoc执行此操作,那么您就不需要中间文件,例如
$ java MyProg <<EOF
te
st
EOF
答案 1 :(得分:0)
我理解这可能是不受欢迎的,原因有多种,但是将多行消息存储在文件中并提供指向程序的URI是不可能的?这可以避免使用转义字符,可能难以解释代码以及其他一些问题。可能的实现可能如下所示:
message.txt:
te
st
//other lines
命令:
java -jar -Dmessage=/path/to/message.txt
的java:
public class Test {
public static void main(String args[]){
File msgFile = new File(System.getProperty("message"));
BufferedReader msgBR = new BufferedReader(new FileReader(msgFile));
String msg ="";
String line = null;
while ((line = msgBR.readLine()) != null) {
msg += line + "\n";
}
System.out.println(msg);
}
}
这可能会被清理一下,但它应该让你找到一个可能的解决方案。如果您有任何问题,请发表评论。
答案 2 :(得分:0)
问题是我收到'\\ n'而不是'\ n',所以我有不同的解决方案 一个是使用echo -e
创建一个脚本#!/bin/bash
VARIABLE=`echo -e "\n\nsomething\n\nhappens"`
java -jar test.jar "$VARIABLE"
另一种解决方案
text = text.replace("\\n","\n");
答案 3 :(得分:0)
你将此标记为noob问题,但即使这是一个容易提出的问题,在java中回答并不容易。 Java将此类评估限制为编译时,因此您需要编写自己的工具或使用其他语言。幸运的是,java包含了这个问题所示的其他语言Is there an eval() function in Java?
接受的答案使用Javascript引擎来评估字符串。以下是将答案与您的问题相结合的示例。
import javax.script.*;
public class Test{
public static void main (String args[]){
String message = System.getProperty("message");
System.out.println(message);
try {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
engine.eval("print('" + message + "')");
} catch (Exception e)
{ System.out.println("Exception: " + e.getMessage()); }
}
}
该程序给出以下结果:
C:\test>java -Dmessage=test Test
test
test
C:\test>java -Dmessage=te\nst Test
te\nst
te
st