我有一个定义为
的数组列表List<String> cmd = new ArrayList<String>();
我正在以这种方式向此List添加其他字符串
cmd.add("/c");
cmd.add(command);
但是如果命令包含&#34; &#34;或者&#39; &#39;并且它们之间有一个空格,引号被截断。 如何解决此问题?
例如,如果命令是
grep "Hello world" /sratch/temp
cmd包含这些字符串/c grep Hello World /scratch/temp
但是,如果命令是grep "Hello\ world" /sratch/temp
cmd中的字符串是
/c grep " Hello World " /scratch/temp
如何编程以便&#34; &#34;是不是被截断了?
答案 0 :(得分:1)
所以你希望你的String
对象包含引号?尝试用反斜杠转义它们:
cmd.add("some string with \"quotes\"");
答案 1 :(得分:1)
此问题与ArrayList
无关,当您将它们分配给String
对象或从用户输入检索它们时,您必须简单地转义单引号和双引号。有关Java中转义序列的更多信息,请查看Oracle网站上的this tutorial。
答案 2 :(得分:0)
您可以转义引号,只需写下:
"grep \"Hello world\" /sratch/temp"
您可以查看this了解更多信息
修改强> 如果您正在解析用户输入,Java将自动转义此特殊字符。例如,使用以下代码:
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
System.out.println("Input:"+s);
}
}
输入:Testing "Quotes"
您将获得此字符串:
答案 3 :(得分:0)
这实际上不是关于Java,而是关于你正在使用的shell。
在shell(即bash,命令提示符等)上,参数通常使用空格分解。
例如,
java my.class The quick brown fox
会产生
的参数列表String[] { "The", "quick", "brown", "fox" }
但是,shell通常允许用户通过用双引号括起来将多个间隔的字符串作为单个参数 - 您正在看到的行为。
例如,
java my.class The quick "brown fox"
会产生
的参数列表String[] { "The", "quick", "brown fox" }
这意味着双引号将从参数列表中删除,并且不字面插入字符串。
如果我的假设是正确的,并且您在给定某种其他命令系统的情况下通过程序运行shell命令,那么您可以简单地用双引号括起命令的每个部分。