>我有一个复杂的字符串拆分,我需要删除注释、空格并保留所有数字,但将所有字符串更改为字符。如果-
符号位于开头,后跟数字,请将其视为负数而不是运算符
注释具有?<space>comments<space>?
样式(注释是占位符)
输入:
-122+2 ? comments ?sa b
-122+2 ? blabla ?sa b
输出:
["-122","+","2","?","s","a","b"]
(所有字符串成字符,没有空格,没有注释)
- 将不需要的字符串
s*?s*w+s*(?=?)
替换为""
。您可以链接String#replaceAll
以删除任何剩余的空格。请注意,?=
表示积极的展望,这里意味着s*?s*w+s*
后跟?
。我希望您已经知道s
指定空格,w
指定单词字符。 - 然后你可以使用正则表达式,
^-d+|d+|D
它表示开头的负整数(即^-d+
) 或数字(即d+
) 或非数字 (D
)。
演示:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String str = "-122+2 ? comments ?sa b";
str = str.replaceAll("\s*\?\s*\w+\s*(?=\?)", "").replaceAll("\s+", "");
Pattern pattern = Pattern.compile("^-\d+|\d+|\D");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
}
输出:
-122
+
2
?
s
a
b