Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中删除包含特定字符的单词?_Java_Regex_String_Filereader_Symbols - Fatal编程技术网

如何在java中删除包含特定字符的单词?

如何在java中删除包含特定字符的单词?,java,regex,string,filereader,symbols,Java,Regex,String,Filereader,Symbols,有没有办法使用正则表达式删除包含“@”字符的整个单词 例如,应删除以下单词:kʌn@tənɪu和b@ilu 我试过: line = br.readLine(); line = line.replaceAll("\\b[@]+\\b",""); System.out.println(line); 。。。它只删除“@”符号,而不删除单词本身 line = br.readLine(); line = line.replaceAll("\\b.+?[@]+.+?\\b",""); System.out

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

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

我试过:

line = br.readLine();
line = line.replaceAll("\\b[@]+\\b","");
System.out.println(line);
。。。它只删除“@”符号,而不删除单词本身

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
使用正则表达式

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

@查找一个“@”

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

因此,代码行应该是:

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

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

(\\s+)([^\\s]*?@[^\\s]*?)(\\s+)
如果要将其替换为周围的两个空格,可以将其替换为
$1$3

如果只想将其替换为一个空格(这样看起来更好),可以将其替换为
$1
$3

在regex101.com上,下面是它的工作原理:

\\s
匹配任何空白字符
\\s
+
将任何空白字符加工一次或多次

[^\\s]
匹配任何非空白字符
[^\\s]
*?
多次匹配任何非空白字符,并尝试查找最小匹配项

@
逐字匹配字符@

[^\\s]
匹配任何非空白字符
[^\\s]
*?
多次匹配任何非空白字符,并尝试查找最小匹配项

\\s
匹配任何空白字符
\\s
+
将任何空白字符加工一次或多次


定义“单词”。。。还有,“单词”之间的间距呢?要保留它们吗?它不会替换字符串“@”中的“@”。对我来说是的。我刚刚用新的测试字符串更新了我的答案。我懂了。你的意思是仅限“@”。同意。不适用于此。
匹配任何非行终止符的字符(相当于Java中的
[^\r\n\u0085\u2028\u2029]
,但其他样式对其的定义不同)。对于非空白字符,请使用
\S