我有一个复杂的字符串拆分,我需要删除注释、空格并保留所有数字,但将所有 字符串更改为字符。如果-
符号在开头并且后跟数字,则将其视为负数而不是运算符
评论的风格为?<space>comments<space>?
(评论是占位符)
输入 :
-122+2 ? comments ?sa b
-122+2 ? blabla ?sa b
输出 :
["-122","+","2","?","s","a","b"]
(所有字符串为字符,没有空格,没有评论)
我有一个复杂的字符串拆分,我需要删除注释、空格并保留所有数字,但将所有 字符串更改为字符。如果-
符号在开头并且后跟数字,则将其视为负数而不是运算符
评论的风格为?<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
这表示开头的负整数 (ie ^-\d+
) 或数字 (ie \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