4
1 1
1 2 1
0
1 1
這是我作為輸入獲得的字串,但我只需要從第二列開始的每一列,也就是:
- 1(第二行)
- 2 和 1(第三排)
- 1(第五排)
這String在可能有多少行或多少列(列被一個空格分隔)方面沒有固定的大小。
我認為這很容易通過使用:
string.split("enter regex here");
我需要第一列之后的每一列。我仍在學習正則運算式,但我似乎無法找到一個好的解決方案。我知道"\\r?\\n" and " "拆分但不知道如何連接兩者以獲得每一列。非常感謝任何幫助:)
另一個字串可能如下所示:
2
1
1 2
9 3 5
1 3
0 9 2 4
0
在那種情況下,我需要2, 3, 5, 3, 9, 2, 4.
uj5u.com熱心網友回復:
您可以使用以下正則運算式:
(?<=\d )\d
它匹配任何數字組合,后跟“數字 空格”。
您應該使用帶有這個正則運算式的匹配器,而不是對此進行拆分。
在此處查看演示。
uj5u.com熱心網友回復:
首先修剪前導列,然后在空白處拆分:
String[] split = str.replaceAll("(?m)^\\d \\s*", "").split("\\s");
見現場演示。
替換使用多行標志 (?m),它匹配每一行^的開頭,并匹配空格,因此第一列被有效地從每一行中洗掉,但也匹配換行符,因此只有一列的行被完全洗掉。盡管新行保留在超過 1 列的行中。\s\s
因為\s匹配空格和換行符,所以拆分會在列之間和(洗掉第一列)行之間拆分,從而產生所需的結果。
我相信這是解決方案所需的最少代碼。
uj5u.com熱心網友回復:
您可以使用拆分每一行String.lines以獲取行流,然后在使用每個空格拆分后對這些行進行平面映射,然后Pattern.splitAsStream跳過第一列并使用逗號作為分隔符重新連接在一起:
String input ="4 \n"
"1 1\n"
"1 2 1\n"
"0\n"
"1 1\n";
Pattern pattern = Pattern.compile(" ");
String result = input.lines()
.flatMap(line -> pattern.splitAsStream(line).skip(1))
.collect(Collectors.joining(", "));
System.out.println(result);
//1, 2, 1, 1
uj5u.com熱心網友回復:
String s = "4 \n"
"1 1\n"
"1 2 1\n"
"0\n"
"1 1\n";
String result = s.replaceAll("((^|\\n)\\d|[ ])", "").replaceAll("(\\d)(?=\\d)", "$1, ");
System.out.println(result);
//1, 2, 1, 1
uj5u.com熱心網友回復:
您可以使用以下正則運算式,它首先捕獲一個數字后跟一個空格,然后捕獲任何數字序列,后跟一個空格或什么都沒有。第二個捕獲組代表String您感興趣的其余部分。
(\d ) ((\d ( |)) )
這是一個實作:
String str = "4 \n"
"1 1\n"
"1 2 1\n"
"0\n"
"1 1";
Pattern pattern = Pattern.compile("(\\d ) ((\\d ( |)) )");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
System.out.println(matcher.group(2));
}
這是測驗上述兩個輸入的代碼的鏈接:
https://www.jdoodle.com/iembed/v0/s92
輸出
1
2 1
1
2
3 5
3
9 2 4
這里還有一個測驗正則運算式的鏈接:
https://regex101.com/r/z1plcG/1
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488802.html
上一篇:只有最后一個物件被推送到物件陣列(JavaScript)
下一篇:過濾字串中非數字字符的函式
