>我有一个菜鸟问题,但我无法弄清楚。
我想从命令行发送一个字符串,其中多行由""分隔
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");