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



>我有一个菜鸟问题,但我无法弄清楚。

我想从命令行发送一个字符串,其中多行由""分隔

public class Test {
 public static void main(String args[]){
    System.out.println(args[0]);
 }
}

我和

java -jar test.jar 'tenst'

我期待结果

te 
st

但我得到了

时斯特

我正在使用Java 7并在Ubuntu中运行。

我通常不会将这种东西作为 VM 参数传递。我可能会将其传递到文件中(如其他地方所述(,或通过标准输入。如果您通过 heredoc 执行此操作,那么您不需要中间文件,例如。

$ java MyProg <<EOF
te
st
EOF
我知道出于

多种原因这可能是不可取的,但是将多行消息存储在文件中并提供将程序定向到该文件的URI是不可能的吗?这样可以避免使用转义字符、可能难以解释的代码以及其他一些问题。可能的实现可能如下所示:

留言.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);
 }
}

这可能会被清理一下,但它应该让你找到一个可能的解决方案。如果您有任何问题,请发表评论。

你把这个问题标记为菜鸟问题,但即使这是一个容易问的问题,但在 java 中也不是一件容易回答的事情。 Java将这种类型的评估限制为编译时间,因此您需要编写自己的工具,或者使用另一种语言。 幸运的是,java 包含其他语言,如此问题所示 Java 中有 eval(( 函数吗?

接受的答案使用 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=tenst Test
tenst
te
st

问题是我接收的是'\'而不是'',所以我有不同的解决方案一种是使用 echo -e 制作脚本

#!/bin/bash
VARIABLE=`echo -e "nnsomethingnnhappens"`
java -jar test.jar "$VARIABLE"

另一种解决方案

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

最新更新