2

我有一个复杂的字符串拆分,我需要删除注释空格并保留所有数字,但将所有 字符串更改为字符。如果-符号在开头并且后跟数字,则将其视为负数而不是运算符

评论的风格为?<space>comments<space>?(评论是占位符)

输入 :

-122+2 ? comments ?sa b
-122+2 ? blabla ?sa b

输出 :

 ["-122","+","2","?","s","a","b"]  

(所有字符串为字符,没有空格,没有评论)

4

1 回答 1

2
  1. \s*\?\s*\w+\s*(?=\?)用替换不需要的字符串""。您可以链接String#replaceAll以删除任何剩余的空白。请注意,这?=意味着积极的前瞻,这里它意味着\s*\?\s*\w+\s*后跟一个?. 我希望您已经知道\s指定空格并\w指定单词字符。
  2. 然后您可以使用正则表达式,^-\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
于 2020-10-18T22:41:11.780 回答