我有一个包含分离命令的String数组 - 每个参数位于不同的单元格中。
我想有一个获取字符串数组的方法,并使用它来准备一个语义上合法的完整命令(即处理特殊字符,例如<space>
,大括号等)。然后,它应该将完整命令作为一个字符串
这是我想要使用的一个非常简单的示例(如果我有createCommand()
方法):
String[] cmdParts = {"ls", "-l", "/tmp /home"};
String cmd = createCommand(cmdParts);
在上面的示例中,我希望cmd
包含字符串ls -l "/tmp /home"
是否有一种方法可以完成这项工作,或类似的东西?
答案 0 :(得分:2)
您可以直接遍历阵列并轻松完成。我什么都想不出来
String createCommand(String[] cmdParts) {
StringBuilder sb = new StringBuilder()
for(String cmdPart : cmdParts) {
if (sb.length() > 0) {
sb.append(" ");
}
sb.append(cmdPart);
}
return sb.toString();
}
虽然它不会留下尾随或前导空格。
另请注意:
{"ls", "-l", "/tmp /home"}
不会导致
ls -l "/tmp /home"
您需要将转义的引号添加到最后一个String。
{"ls", "-l", "\"/tmp /home\""}
答案 1 :(得分:0)
如果这是你的意思,你可以连接字符串。并将其放在createCommand方法中,该方法将字符串数组作为输入并输出连接字符串:
public String createCommand(String[] parts)
{
String result = "";
for(String part : parts)
{
result = result + part + " "; \\concatenates the result string with the next string in your parts array.
}
return result;
}
答案 2 :(得分:0)
最好是出于各种原因使用StringBuilder。编译器可能会将您的方法转换为StringBuilder,但您不想依赖它。有效Java的第51项是一个很好的参考,为什么你应该在这种情况下使用StringBuilder。
至于实际的方法,你会做这样的事情,但就像你说的那样,你将不得不在for循环中引入逻辑来处理转义特定字符等等。
public String createCommand(String[] cmdParts) {
StringBuilder newCommand = new StringBuilder();
for(String s : cmdParts) {
newCommand.append(s).append(" ");
}
return newCommand.toString();
}
答案 3 :(得分:0)
如果你有java8,你可以使用以下代码:
public static void main(String[] args) {
String[] cmdParts = {"ls", "-l", "/tmp /home"};
String cmd = String.join(" ", cmdParts);
System.out.println(cmd);
}
这更容易。如果你没有java8,你可以使用其他人的代码。