在java中拆分字符串会得到与预期不同的结果

时间:2016-10-24 02:57:04

标签: java arrays regex string split

您好我是Java的新手,并尝试使用java提供的split method

输入是以下格式的字符串

broadcast message "Shubham Agiwal"

所需输出要求是获取包含以下元素的数组

 ["broadcast","message","Shubham Agiwal"]

我的代码如下

  String str="broadcast message \"Shubham Agiwal\"";
    for(int i=0;i<str.split(" ").length;i++){
        System.out.println(str.split(" ")[i]);
    }

我从上面的代码中获得的输出

["broadcast","message","\"Shubham","Agiwal\""]

有人可以让我在代码中更改我需要的内容以获得上面提到的所需输出吗?

3 个答案:

答案 0 :(得分:1)

这很难直接拆分字符串。所以,我会使用&#39; \ t&#39;取代 如果空格不在&#34;&#34;则为空格。我的代码如下,您可以尝试,也许其他人会有更好的解决方案,我们也可以讨论它。

package com.code.stackoverflow;

/ **  * 2016年10月24日由江朝创建。 * /

public class Main {

public static void main(String args[]) {
    String str="broadcast message \"Shubham Agiwal\"";
    char []chs = str.toCharArray();
    StringBuilder sb = new StringBuilder();
    /*
    * false: means that I am out of the ""
    * true: means that I am in the ""
    */
    boolean flag = false;
    for (Character c : chs) {
        if (c == '\"') {
            flag = !flag;
            continue;
        }
        if (flag == false && c == ' ') {
            sb.append("\t");
            continue;
        }
        sb.append(c);
    }
    String []strs = sb.toString().split("\t");
    for (String s : strs) {
        System.out.println(s);
    }
}

}

答案 1 :(得分:0)

这很乏味但它确实有效。唯一的问题是,如果引号中的空格是制表符或其他空格分隔符,则它将替换为空格字符。

    String str = "broadcast message \"Shubham Agiwal\" better \"Hello java World\"";
    Scanner scanner = new Scanner(str).useDelimiter("\\s");
    while(scanner.hasNext()) {
        String token = scanner.next();
        if ( token.startsWith("\"")) { //Concatenate until we see a closing quote
            token = token.substring(1);
            String nextTokenInQuotes = null;
            do {
                nextTokenInQuotes = scanner.next();
                token += " ";
                token += nextTokenInQuotes;
            }while(!nextTokenInQuotes.endsWith("\""));

            token = token.substring(0,token.length()-1); //Get rid of trailing quote
        }

        System.out.println("Token is:" + token);
    }

这会产生以下输出:

Token is:broadcast
Token is:message
Token is:Shubham Agiwal
Token is:better
Token is:Hello java World

答案 2 :(得分:-1)

public static void main(String[] arg){
    String str = "broadcast message \"Shubham Agiwal\"";
    //First split 
    String strs[] = str.split("\\s\"");
    //Second split for the first part(Key part)
    String[] first = strs[0].split(" ");
    for(String st:first){
        System.out.println(st);
    }
    //Append " in front of the last part(Value part)
    System.out.println("\""+strs[1]);
}