有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用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) 个答案

  1. # 1 楼答案

    只需对多个分隔符使用String split#方法

    String string = "/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[] parts = string.split("((-c)|(\\ ))");
    String part1 = parts[0]; 
    String part2 = parts[1]; 
    

    以此类推,尽可能多的零件。这样,分隔符也将保留在字符串部分中