【问题标题】:How do I delete words containing a certain charater in java?如何在java中删除包含某个字符的单词?
【发布时间】:2015-07-10 15:25:26
【问题描述】:

有没有办法使用正则表达式删除包含“@”字符的整个单词?

例如,应删除以下单词:kʌn@tənɪub@ilu

我试过了:

line = br.readLine();
line = line.replaceAll("\\b[@]+\\b","");
System.out.println(line);

...它只删除“@”符号,而不是单词本身。

【问题讨论】:

  • 定义“单词”...另外,“单词”之间的间距呢?你想保留它们吗?

标签: java regex string filereader symbols


【解决方案1】:

使用正则表达式

[^@\s]*@\S*

[^@\s]* 查找零个或多个不是“@”或空格的字符

@ 寻找一个“@”

\s* 查找零个或多个非空白字符

所以代码行是:

line = line.replaceAll("[^@\\s]*@\\s*","");

【讨论】:

  • . 匹配任何不是 行终止符 的字符(相当于 Java 中的 [^\r\n\u0085\u2028\u2029],但其他风格的定义不同)。对于非空白字符,使用\S
【解决方案2】:

您可以使用如下正则表达式:

(\\s+)([^\\s]*?@[^\\s]*?)(\\s+)

如果你想用它周围的两个空格替换它,你可以用$1$3替换它。

如果您只想用一个空格替换它(这样看起来更好),您可以用$1$3 替换它。

Here's a preview of the regex in action 在 regex101.com 上,它是这样工作的:

\\s 匹配任何空白字符
\\s+ 匹配任何空白字符一次或多次。

[^\\s] 匹配任何非空白字符
[^\\s]*? 匹配任何非空白字符任意次数,并尝试找到最小的匹配项。

@ 匹配字符 @ 的字面意义。

[^\\s] 匹配任何非空白字符
[^\\s]*? 匹配任何非空白字符任意次数,并尝试找到最小的匹配项。

\\s 匹配任何空白字符
\\s+ 匹配任何空白字符一次或多次。

【讨论】:

    【解决方案3】:
    line = br.readLine();
    line = line.replaceAll("\\b.+?[@]+.+?\\b","");
    System.out.println(line);
    

    编辑:.*? 不好。我测试了最新的编辑,它对我有用。

        String test =  "  x+1@ three@two @@ o@ne @ two";
        test = test.replaceAll("\\b.+?[@]+.+?\\b","");
        System.out.println(test);
    

    two
    

    【讨论】:

    • 它不会替换字符串“@”中的'@'
    • @deme72。对我有用。我刚刚用新的测试字符串更新了我的答案。
    • @deme72。我知道了。你的意思是" @ "。同意。对此不起作用。
    猜你喜欢
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 2016-04-24
    • 1970-01-01
    相关资源
    最近更新 更多