基本上,我想要的結果是根據已知關鍵字拆分字串,無論空格是否分隔關鍵字。下面是我當前實作的示例,期望引數 String line = "sum:=5;":
private static String[] nextLineAsToken(String line) {
return line.split("\\s (?=(:=|<|>|=))");
}
預期的:
String[] {"sum", ":=", "5;"};
實際的:
String[] {"sum:=5;"};
我覺得這是不可能的,但很高興收到你們的來信。謝謝。
uj5u.com熱心網友回復:
您的主要問題是您編碼\s 而不是\s*,這需要有空格來拆分,而不是空格是可選的。另一個問題是您的正則運算式僅在運算子之前拆分。
使用這個正則運算式:
\s*(?=(:=|<|>|(?<!:)=))|(?<=(=|<|>))\s*
見現場演示。
或作為 Java:
return line.split("\\s*(?=(:=|<|>|(?<!:)=))|(?<=(=|<|>))\\s*");
它使用前瞻來拆分運算子之前和后瞻來拆分運算子。
\s* 已添加以消耗術語之間的任何空格。
還要注意前瞻中的負面觀察,以防止(?<!:) 在:和之間分裂=。
uj5u.com熱心網友回復:
這是一個示例代碼,可用于將輸入分成組。像常規空格這樣的空白字符將被忽略。它稍后在 for 回圈中列印到輸出:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
public static void main(String[] args) {
final String regex = "(\\w*)\\s*(:=)\\s*(\\d*;)";
final String string = "sum:=5;";
final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i ) {
System.out.println("Group " i ": " matcher.group(i));
}
}
}
}
這是輸出:
Full match: sum:=5;
Group 1: sum
Group 2: :=
Group 3: 5;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/418872.html
標籤:
