我对正则表达式的经验和知识有限。我需要做的是将一个字符串拆分成多个子字符串。
有问题的字符串是
String str =
"Brayden Schenn, C GAMES PLAYED: 13, GOALS: 3, ASSISTS: 6," +
" POINTS: 9, PLUS/MINUS: 5, PIM: 7";
我想把它分成子串,其他字符串,即。
String gamesPlayed = "13";
String goals = "3";
etc
或者类似的东西,所以我可以提取父字符串中有多少目标,助攻等。
非常感谢任何帮助。
答案 0 :(得分:3)
我会:
,
:
我在Java方面的经验几乎为零,但这就是我的建议:
String initialStr =
"GAMES PLAYED: 13, GOALS: 3, ASSISTS: 6, POINTS: 9,"+
" PLUS/MINUS: 5, PIM: 7";
String colon = ": ";
Map< String, Integer> keyValuePairs = new HashMap<>();// Java 7 diamond
String[] parts = initialStr.split(",");
for( String keyValue : parts ) {
String[] pair = keyValue.split(colon);
keyValuePairs.put( pair[0], Integer.parseInt( pair[1] ));
}
请问keyValuePairs如下:
assert keyValuePairs.get( "GAMES PLAYED" ) == 13;
答案 1 :(得分:2)
您可以使用以下正则表达式(([\w/]+):\s?(\d+)),?
来匹配字符串中的所有key:value
,然后只使用GOALS
和group(2)
提取3
group(3)
。
正则表达式如下:
( # capture key/value (without the comma)
( # capture key (in group 2)
[\w/]+ # any word character including / one or more times
)
: # followed by a colon
\s? # followed by a space (or not)
( # capture value (in group 3)
\d+ # one or mor digit
)
)
,? # followed by a comma (or not)
考虑到你的字符串,它应匹配以下内容:
PLAYED: 13
GOALS: 3
ASSISTS: 6
POINTS: 9
PLUS/MINUS: 5
PIM: 7
这是Java代码:
String s = "Brayden Schenn, C GAMES PLAYED: 13, GOALS: 3, ASSISTS: 6, POINTS: 9, PLUS/MINUS: 5, PIM: 7";
Matcher m = Pattern.compile("(([\\w/]+):\\s?(\\d+)),?").matcher(s);
Map<String, Integer> values = new HashMap<String, Integer>();
// find them all
while (m.find()) {
values.put(m.group(2), Integer.valueOf(m.group(3)));
}
// print the values
System.out.println("Games Played: " + values.get("PLAYED"));
System.out.println("Goals: " + values.get("GOALS"));
System.out.println("Assists: " + values.get("ASSISTS"));
System.out.println("Points: " + values.get("POINTS"));
System.out.println("Plus/Minus: " + values.get("PLUS/MINUS"));
System.out.println("Pim: " + values.get("PIM"));