如何使用java拆分除内引号之外的字符串
这是我的绳子
"/opt/jboss-eap/bin/jboss-cli.sh --connect --controller=localhost:9990 -c command=\"deploy /app/jboss-eap-7.1/standalone/updates/sample.war --force\""
我想按如下方式拆分上面的字符串
/opt/jboss-eap/bin/jboss-cli.sh
--connect
--controller=localhost:9990
-c
command="deploy /app/jboss-eap-7.1/standalone/updates/sample.war --force"
我尝试了以下代码
List<String> matchList = new ArrayList<String>();
Pattern regex = Pattern.compile("[^\\s\"']+|\"[^\"]*\"|'[^']*'");
Matcher regexMatcher = regex.matcher("/opt/jboss-eap/bin/jboss-cli.sh --connect --controller=localhost:9990 -c command=\"deploy /app/jboss-eap-7.1/standalone/updates/sample.war --force\"");
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}
out.println("matchList="+matchList);
但结果是
matchList=[/opt/jboss-eap/bin/jboss-cli.sh, --connect, --controller=localhost:9990, -c, command=, "deploy /app/jboss-eap-7.1/standalone/updates/sample.war --force"]
/opt/jboss-eap/bin/jboss-cli.sh
--connect
--controller=localhost:9990
-c
command=
"deploy /app/jboss-eap-7.1/standalone/updates/sample.war --force"
它适用于java“ProcessBuilder”
编辑
我使用了这个链接的另一个方法Tokenizing a String but ignoring delimiters within quotes
String str = "/opt/jboss-eap/bin/jboss-cli.sh --connect --controller=localhost:9990 -c command=\"deploy /app/jboss-eap-7.1/standalone/updates/sample.war --force\"";
String regex = "\"([^\"]*)\"|(\\S+)";
List<String> list = new ArrayList<String>();
Matcher m = Pattern.compile(regex).matcher(str);
while (m.find())
{
if (m.group(1) != null)
{
list.add(m.group(1));
}
else
{
list.add(m.group(2));
}
}
out.println(list);
输出为
/opt/jboss-eap/bin/jboss-cli.sh
--connect
--controller=localhost:9990
-c
command="deploy
/app/jboss-eap-7.1/standalone/updates/sample.war
--force"
# 1 楼答案
只需对多个分隔符使用String split#方法
以此类推,尽可能多的零件。这样,分隔符也将保留在字符串部分中