假设我有一个文本文件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
.
.
.
但是这会分裂所有白人的步伐,包括撇号中的那些,并将它们分开存放。如何使用拆分来操作扫描仪?我已经在网上搜索了大量时间来获得可靠的解决方案,但我还没有找到。任何参考或信息都会很棒
编辑:
您无法向文本文件添加任何内容,只是为了更改分隔符
答案 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);
}