如何在java中拆分用多个分隔符分隔的字符串?

时间:2016-03-22 23:21:26

标签: java

假设我有一个文本文件sample.txt,其信息如下:

John-Mike "male" "a computer scientist" 6 9

我想将此文件读入数组

array[0] = John-Mike 
array[1] = male
array[2] = a computer scientist
array[3] = 6
array[4] = 9

我试过了

String[] tokens = file.nextLine().split(" ");

它给了我这样的东西

array[0] = John-Mike
array[1] = male
array[2] = a
array[3] = computer
array[4] = science
array[5] = student
.
.
.

但是这会分裂所有白人的步伐,包括撇号中的那些,并将它们分开存放。如何使用拆分来操作扫描仪?我已经在网上搜索了大量时间来获得可靠的解决方案,但我还没有找到。任何参考或信息都会很棒

编辑:

您无法向文本文件添加任何内容,只是为了更改分隔符

3 个答案:

答案 0 :(得分:1)

您需要编写正则表达式才能将其拆分。看看这篇文章: Split string on spaces in Java, except if between quotes (i.e. treat \"hello world\" as one token)

答案 1 :(得分:1)

一种方法是将它们作为具有正则表达式的组提取。例如:

String s = "John-Mike \"male\" \"a computer scientist\" 6 9";
Pattern p = Pattern.compile("[\\w\\d-]+|\"[\\w\\d -]+\"");
Matcher m = p.matcher(s);
while(m.find()) {
    System.out.println(m.group());
}
/* Result: 
John-Mike
"male"
"a computer scientist"
6
9
*/

答案 2 :(得分:0)

您可能需要首先使用"拆分字符串,然后如果它包含空格并且未用引号括起来,则将其进一步拆分,例如:这样的事情(未经测试):

public static void main(String[] args) throws Exception{
    String s = "John-Mike \"male\" \"a computer scientist\" 6 9";
    String[] tokens = s.split("\"");
    List<String> newTokens = new ArrayList<>();
    for(String token : tokens){
        token = token.trim();
        if(token.isEmpty()){
            continue;
        }
        if(token.contains(" ") && !s.contains("\""+token+"\"")){
            //This means it is a separate string with spaces, in this case, split further
            for(String subToken : token.split(" ")){
                newTokens.add(subToken);
            }
        }else{
            newTokens.add(token);
        }
    }
    System.out.println(newTokens);
}