我有多行游戏分数作为输入。输入是这样的。
Lions 1, FCAwesome 1
我目前正在根据逗号或空格拆分该行。
Charset charset = Charset.forName("US-ASCII");
String REGEX = ",?\\s+";
Pattern pattern = Pattern.compile(REGEX);
try(BufferedReader reader = Files.newBufferedReader(path, charset)){
int count = 0;
String line = null;
while((line = reader.readLine()) != null){
String[] arr = pattern.split(line);
}
这适用于提供的输入。但是,如果团队名称有多个单词,我的代码会中断。
Lions 1, FC Awesome 1
如何修改我的REGEX来处理这种情况。 FC Awesome仍然需要一个团队名称。
答案 0 :(得分:3)
尝试拆分空间
请尝试使用split(",\\s|\\s(?=\\d)")
如果团队名称的某些部分可能以数字开头,我们可以更多地指定我们的条件。我们可以要求[space][digit]
在逗号后面或者在文本末尾放置。
split(",\\s|\\s(?=\\d+(?=,|$))")
答案 1 :(得分:0)
尝试用逗号分割整个数据,然后使用下面的getTeam
方法
class Team {
String name;
int score;
public Team(String name, int score) {
this.name = name;
this.score = score;
}
@Override
public String toString() {
return this.name + ", " + this.score;
}
public static Team getTeam(String data) {
String score = "";
int i = data.length() - 1;
for (; Character.isDigit(data.charAt(i)); i--) {
score += data.charAt(i);
}
String name = data.substring(0, i);
return new Team(name, Integer.parseInt(new StringBuilder(score).reverse().toString()));
}
}
例如输入就像这样
LION_@# 1234 OLD 5555 ,TEAM2345NAME NAME 123NAME 4444
名字是LION_@# 1234 OLD
,其得分是5555
第二个名称是TEAM2345NAME NAME 123NAME
,4444
是它的得分
注意:两者都在其名称中包含数字或特殊字符,甚至包含得分部分的空格。
现在我只需要创建一个Team类的实例。如下例所示:
String all_data = "LION_@# 1234 OLD 5555 ,TEAM2345NAME NAME 123NAME 4444";
// spliting data by comma
String parts[] = all_data.split(",");
// calling getTeam method
Team t1 = Team.getTeam(parts[0]);
Team t2 = Team.getTeam(parts[1]);
然后使用它的字段,例如打印它们。
System.out.println(t1.name);
System.out.println(t2.score);