我的目標是從這樣的字串中提取字符
(B,C) (D,E) (A,B)
到字串陣列[B,C,D,E,A,B]的split方法。
我使用的正則運算式字串是 "\\(|\\)|,"
我得到了一個結果 [B,C, ,D,E, ,A,B]
我完全不知道為什么結果陣列中有空白字符。
String[] tokens = str.split("\\s");
for(String token : tokens) {
token.charAt(1);
token.charAt(3);
}
這可能是另一個答案,但我只想知道我在split方法和正則運算式中遺漏了什么。
uj5u.com熱心網友回復:
你在這里想要的是一個正則運算式查找所有。一種直接的方法是使用正式的Patternand Matcher:
String input = "(B,C) (D,E) (A,B)";
Pattern p = Pattern.compile("\\(([A-Z] ),\\s*([A-Z] )\\)");
Matcher m = p.matcher(input);
List<String> matches = new ArrayList<>();
while (m.find()) {
matches.add(m.group(1));
matches.add(m.group(2));
}
System.out.println(matches); // [B, C, D, E, A, B]
另一種方法,如果您堅持使用字串拆分,則首先將元組字串預處理為空格分隔的串列:
String input = "(B,C) (D,E) (A,B)";
input = input.replaceAll("\\(([A-Z] ),\\s*([A-Z] )\\)\\s*", "$1 $2 ");
String[] parts = input.split(" ");
System.out.println(Arrays.toString(parts)); // [B, C, D, E, A, B]
uj5u.com熱心網友回復:
正如評論中提到的,因為(在開頭有一個并且您正在拆分,(所以在結果陣列的開頭會有一個空字串。
您可以使用此基于 Java 8 流的代碼來擺脫空字串:
String str = "(B,C) (D,E) (A,B)";
String[] tokens = Arrays.stream(str.split("[(),\\s] "))
.filter(s -> !s.isEmpty()).toArray(String[]::new);
//=> [ "B", "C", "D", "E", "A", "B" ]
Code Demo
uj5u.com熱心網友回復:
嘗試這個。
public static void main(String[] args) {
String str = "(B,C) (D,E) (A,B)";
String[] tokens = str.replaceAll("[(),\\s] ", " ").trim().split(" ");
System.out.println(Arrays.toString(tokens));
}
輸出:
[B, C, D, E, A, B]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/346362.html
