拆分团队名称,分数用空格和逗号分隔

时间:2016-06-27 12:46:01

标签: java regex

我有多行游戏分数作为输入。输入是这样的。

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仍然需要一个团队名称。

2 个答案:

答案 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 123NAME4444是它的得分

注意:两者都在其名称中包含数字或特殊字符,甚至包含得分部分的空格。

现在我只需要创建一个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);