0

正規表現の経験と知識は限られています。私がする必要があるのは、文字列を複数のサブ文字列に分割することです。

問題の文字列は

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

またはそのようなもので、親文字列に含まれるゴールやアシストなどの数を引き出すことができます。

どんな助けでも大歓迎です。

4

2 に答える 2

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;
于 2013-02-16T07:44:08.403 に答える
2

次の正規表現(([\w/]+):\s?(\d+)),?を使用して、文字列内のすべてに一致させてから、とでkey:value抽出GOALSすることができます。group(2)3group(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"));
于 2013-02-16T07:46:56.697 に答える