Hier ist der falsche (Job Sicherheit) Art und Weise:
String[] usernames = str.substring(1)
.split("=\\d+[,}]\\s*");
Warum ist das der falsche Weg? Wir werfen die Sachen raus, die wir nicht wollen. Das erste Zeichen (was auch immer es ist), und hoffen, dass "=#, "
und "= #}" ist das einzige, was wir nicht wollen. Wenn die Zeichenfolge mit "{ tchristofferson=10"
begann, würde der erste Benutzername ein Leerzeichen erhalten.
Der bessere Weg ist es, die Sachen, die Sie wollen, anzupassen. Und jetzt, wo ich versuche nicht, die Antwort auf einem iPhone-Bildschirm zu erstellen, hier ist es:
String input = "{tchristofferson=10, mchristofferson=50}";
Pattern USERNAME_VALUE = Pattern.compile("(\\w+)=(\\d+)");
Matcher matcher = USERNAME_VALUE.matcher(input);
ArrayList<String> list = new ArrayList<>();
while(matcher.find()) {
list.add(matcher.group(1));
}
String[] usernames = list.toArray(new String[0]);
Dieser jedes Zeichen Ihrer Benutzername annimmt, entsprechen das \w
Muster (dh [a-zA-Z0-9_]
und andere alphanumerischen Unicode-Codepunkte) . Ändern Sie, wenn Ihre Benutzernamenanforderungen mehr oder weniger restriktiv sind.
(\w+)
wird verwendet, um den Benutzernamen als matcher.group(1)
zu erfassen, der zu der Liste hinzugefügt wird, die schließlich in Ihre String[]
umgewandelt wird.
(\d+)
wird auch verwendet, um die mit diesem Benutzer verknüpfte Nummer als zu erfassen. Diese Erfassungsgruppe wird (gegenwärtig) nicht verwendet, so dass Sie die Klammern für eine kleine Effizienzverstärkung, d. H. "(\\w+)=\\d+"
, entfernen könnten. Ich habe es aufgenommen, falls Sie etwas mit diesen Werten machen wollten.
Was sind die gültigen Zeichen in einem Benutzernamen? Kann es Zahlen und Sonderzeichen wie _- und so weiter enthalten. –
mit welcher Version von Java sollten Sie diese Aufgabe abschließen? – j2ko
Ich mache dies in Java 7 – tchristofferson