我有一个完整的句子,如下所示。
“ Stackoverflow是最好的,stackoverflow.com很棒!”
我需要找到匹配给定子字符串的第一个完整单词。例如,如果输入为“ overflow”,则结果应为“ Stackoverflow”,因为它是包含给定单词的第一个单词。
我尝试了以下代码段,但对我不起作用。
String fullText="Stackoverflow is the best and stackoverflow.com rocks !!!";
String token = "overflow";
Pattern pattern = Pattern.compile(token);
Matcher matcher = pattern.matcher(fullText);
while (matcher.find())
{
System.out.println("Whole word is "+matcher.group());
}
我得到“溢出”作为输出。我的代码可能有什么问题?
答案 0 :(得分:2)
我的代码可能出什么问题了?
因为您的正则表达式仅匹配overflow
,而不匹配包含它的单词
请改用以下正则表达式:
\\b\\S*overflow\\S*
String token = "\\b\\S*overflow\\S*";
Pattern pattern = Pattern.compile(token);
Matcher matcher = pattern.matcher(fullText);
if (matcher.find())
{
System.out.println("Whole word is :"+matcher.group());
}
说明:
\b
匹配单词边界
\\S*
匹配零个或多个无空格字符
overflow
的字面意思是
\\S*
匹配零个或多个非空格字符
备选方案二:使用split并遍历每个单词,然后在找到单词时中断
String fullText="Stackoverflow is the best and stackoverflow.com rocks !!!";
String [] strWords = fullText.split("\\s");
for(String strWord:strWords){
if(strWord.contains("overflow")){
System.out.println(strWord);
break;
}
}
答案 1 :(得分:1)
问题在于,您不使用令牌中的正则表达式。您只需在Mather中发布确切的字符串,他就会找到该字符串以及所有字符串。
如果要指定单词搜索条件,则可以使用正则表达式http://www.fon.hum.uva.nl/praat/manual/Regular_expressions_1__Special_characters.html的模式。
在这种情况下,它看起来像:(我在文本中又添加了一个词:stackowerflowr)
所有单词(以任何字符开头)均包含“溢出”并以空格结尾:
String fullText="Stackoverflow is the best and stackoverflow.com rocks !!! stackoverflowr";
String token = "[a-zA-Z]+overflow ";
整个单词都是Stackoverflow
所有单词,以任何字符开头和结尾(无数字或符号)
String fullText="Stackoverflow is the best and stackoverflow.com rocks !!! stackoverflowr";
String token = "[a-zA-Z]+overflow[a-zA-Z]+"
整个单词都是stackoverflowr
所有单词(以任何字符开头)都包含“ overflow” +“。”。 +任何字符
String fullText="Stackoverflow is the best and stackoverflow.com rocks !!! stackoverflowr";
String token = "[a-zA-Z]+overflow[.][a-z]+"
整个单词是stackoverflow.com
[a-zA-Z]-包括任何字母字符
'+'加号是一个或多个匹配量词。
。点与换行符以外的任何字符匹配。
还可以添加特殊符号“ |” (或)搜索更多变体,但要小心-如果模板适合不同的变体,则只会确定第一个变体。
String fullText="Stackoverflow is the best and stackoverflow.com rocks !!! stackoverflowr";
String token = "[a-zA-Z]+overflow |[a-zA-Z]+overflow[.][a-z]+";
整个单词都是Stackoverflow
整个单词是stackoverflow.com