如何从命令行发送包含多行的字符串

时间:2014-12-22 16:14:26

标签: java command-line java-7

我有一个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中运行。

4 个答案:

答案 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