我想使用模式匹配从Java中删除字符串中的所有单字母单词。我的编码如下:
String str = "P@";
//remove single char words and extra white spaces
inputStr = inputStr.replaceAll("\\b[\\w']{1}\\b", "").replaceAll("\\s+", " ").trim();
我希望输出为P @,因为输入不是单个字母。但我得到输出为@因为它消除了P.所以基本上它只考虑字母字符匹配模式。而我想根据输入字符串的长度进行匹配。
请帮忙。
答案 0 :(得分:2)
尝试使用:
String data = "asd df R# $R $$ $ 435 4ee 4";
String replaceAll = data.replaceAll("(\\s.\\s)|(\\s.$)", " ");
System.out.println(replaceAll);
输出为:asd df R# $R $$ 435 4ee
答案 1 :(得分:0)
使用此
str = str.replaceAll("(^.$|\\s.\\s|^.\\s|\\s.$)", "").replaceAll("\\s+", " ").trim();
你的解决方案的问题在于你使用的是\b
,它期待一个字符在结尾和单词的开头,所以它在你的情况下不起作用。
/b
在单词字符(与\ w匹配的任何内容)和非单词字符(由[^ \ w]或\ W匹配的任何内容)之间以及字符串的开头和/或结尾处的位置匹配如果字符串中的第一个和/或最后一个字符是单词字符。
答案 2 :(得分:0)
试试这个正则表达式:
\s([^\s]{1})\s
应该捕获单个字符的非空格,由两边的空格分隔。如果您需要接受非空白字符,例如','和'。'作为分隔符,您需要添加它们。
答案 3 :(得分:0)
测试用例是:
asd df R#$ R $$ $ 435 4ee 4嘿哥们这是我想要的测试
"[!-~]?\\b[A-z]\\b[!-~]?"
"[!-~]?\\b[\\w]\\b[!-~]?"
上述代码的输出为:
asd df $$ $ 435 4ee 4嘿伙计这是测试通缉
asd df $$ $ 435 4ee嘿伙计这是测试通缉
请注意,在第二个中,四个缺失。第二个正则表达式摆脱了数字不知道是否计算了一个数字