[英]Splitting team names with scores separated by space and commas
我有多行游戲分數作為輸入。 輸入是這樣的。
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仍然需要一個團隊名稱。
嘗試分裂空間
所以嘗試使用split(",\\\\s|\\\\s(?=\\\\d)")
如果團隊名稱的某些部分可能以數字開頭,我們可以更多地指定我們的條件。 我們可以要求[space][digit]
以逗號后面或者放在文本末尾。
split(",\\\\s|\\\\s(?=\\\\d+(?=,|$))")
嘗試用逗號分割整個數據,然后使用下面的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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.