Sie können etwas tun ein mit Regular Expression:
String fileLineString = "Boston (MA), New York City (NY, CT, NJ)";
final Pattern REMOVE_BRACKETED = Pattern.compile("\\(.+?\\)");
Matcher matcher = REMOVE_BRACKETED.matcher(fileLineString);
String res = matcher.replaceAll("").replaceAll(" , ", ",").trim();
String[] cities = res.split(",");
//Display the cities Array in Console...
for (int i = 0; i < cities.length; i++) {
System.out.println(cities[i]);
}
Die Konsolenausgabe wird:
Boston
New York City
Das zu verwendende RegEx-Muster sucht grundsätzlich nach allen offenen Klammern \\(
zusammen mit einem oder mehreren Zeichen (außer Newline), unabhängig davon, wie viele .+?
bis zu den schließenden Klammern \\)
gefunden werden.
Wir führen dann dieses Muster durch die Matcher.matcher() Methode.
Wir erklären dann eine String-Variable (namens res) und initialisieren es mit dem zurückgegebenen String aus dem Matcher.replaceAll() Methode, die jede Untersequenz der Eingangssequenz ersetzt, die das Muster mit dem angegebenen übereinstimmt Ersetzungszeichenfolge verwenden wir "" innerhalb der Methode, um anzuzeigen, dass wir ersetzen möchten, was übereinstimmte. Wir wenden dann die String.replaceAll() Methode (wie in: .replaceAll(" , ", ",")
) an, um die unerwünschten Leerzeichen vor und nach den Trennzeichen zu bereinigen, und schließlich wenden wir die String.trim() an, um alle führenden oder nachfolgenden zu entfernen Leerzeichen aus der gesamten Ergebniszeichenfolge sollten vorhanden sein.
Jetzt erstellen wir einfach ein String Array Städte mit dem String.split() Methode genannt. Den Rest des Codes bin ich mir ziemlich sicher, dass du es herausfinden kannst.
UPDATE:
Ganz einfach, weil diese Art von nervte mich ein bisschen ...
Der obige Code ausreichend für Strings arbeitet, die Klammern enthalten, die nicht verschachtelt sind, aber nicht, wenn es Klammern verschachtelt sind. Wenn Sie feststellen, dass Ihre Strings von Zeit zu Zeit verschachtelte Klammern enthalten, können Sie die folgende Methode verwenden, die auch verschachtelte Klammern entfernt.
String fileLineString = "Boston (MA), New York City (NY, (CT), NJ)";
Pattern pattern = Pattern.compile("\\([^()]*\\)");
String wasString;
String res = fileLineString;
do {
wasString = res;
res = pattern.matcher(wasString).replaceAll("");
} while (!wasString.equals(res));
res = res.replaceAll("\\s+,\\s+", ",").trim();
String[] cities = res.split(",");
//Display the cities Array in Console...
for (String citie : cities) {
System.out.println(citie);
}
Ausgabe auf Konsole wird:
Boston
New York City
Wenn Sie andere Klammern an den regulären Ausdruck hinzufügen möchten wie {}, [], oder sogar <>, dann können Sie dies tun:
- Parenthesis Nur:
"\\([^()]*\\)"
- Parenthesis und Curly Brackets:
"\\([^()]*\\)|\\{[^{}]*\\}"
- Parenthesis, Curly Brackets und Eckige Klammern:
"\\([^()]*\\)|\\{[^{}]*\\}||\\[[^\\[\\]]*\\]"
- Parenthesis, Curly Klammern, eckige Klammern und Chevron Brackets:
"\\([^()]*\\)|\\{[^{}]*\\}||\\[[^\\[\\]]*\\]|\\<[^<>]*\\>"
Mit dem letzten, es spielt keine Rolle, welche der vier In der Zeichenfolge werden Klammern gefunden. Sie und ihre Inhalte werden aus der Zeichenfolge entfernt, auch wenn eine oder alle ineinander verschachtelt sind.
Java regex kann eventuell verschachtelte Klammern nicht verarbeiten. Da Klammern jedoch nicht geschachtelt sind, ist es möglich, die Zeichenfolge für Komma zu trennen. –