在字符串java中查找完整的单词

我正在编写一段代码,其中我必须找到完整的单词,例如,如果我有

String str = "today is tuesday"; 

我正在寻找“t”然后我找不到任何字眼。

任何人都可以告诉我如何在java中编写这样的程序?

我使用正则表达式执行此类任务。 在你的情况下,它应该看起来像这样:

 String str = "today is tuesday"; return str.matches(".*?\\bt\\b.*?"); // returns "false" String str = "today is t uesday"; return str.matches(".*?\\bt\\b.*?"); // returns "true" 

一个简短的解释:

。 匹配任何字符,*? 是零或多次 ,\ b是单词边界

有关正则表达式的更多信息可以在这里找到,或者专门针对java

  String sentence = "Today is Tuesday"; Set words = new HashSet( Arrays.asList(sentence.split(" ")) ); System.out.println(words.contains("Tue")); // prints "false" System.out.println(words.contains("Tuesday")); // prints "true" 

每个contains(word)查询都是O(1) ,因此没有实现自己复杂的字典数据结构,如果你在文本中有很多单词要查找,这是最快最实用的解决方案。

这使用String.split来分隔" "分隔符上的句子中的单词。 根据问题的定义方式,其他可能的变化是使用\b ,单词边界锚。 如果你必须考虑自然语言的每个语法特征(例如, "can't"\b分为"can""t" ),问题就会变得更加困难。

通过使用传统的case规范化技巧,可以很容易地引入不区分大小写:split和hash sentence.toLowerCase() ,并查看它是否contains(word.toLowerCase())

也可以看看

  • regular-expressions.info – 主持人
  • 维基百科 – 字符串搜索算法
  • 维基百科 – Patricia Trie
 String[] tokens = str.split(" "); for(String s: tokens) { if ("t".equals(s)) { // t exists break; } } 
 String[] words = str.split(" "); Arrays.sort(words); Arrays.binarySearch(words, searchedFor); 
 String str = "today is tuesday"; StringTokenizer stringTokenizer = new StringTokenizer(str); bool exists = false; while (stringTokenizer.hasMoreTokens()) { if (stringTokenizer.nextToken().equals("t")) { exists = true; break; } } 

使用像“\ bt \ b”这样的正则表达式。

你可以通过放置一个以空格结尾的正则表达式来做到这一点。

我建议你使用String的“split”function,空格作为分隔符,然后逐个浏览这些元素并进行直接比较。

我建议使用这个正则表达式pattern1 =“。 \ bt \ b。 ”而不是pattern2 =“。 ?\ bt \ b。 ?” 。 如果在该字符串中出现’t’而不是刚刚到达您正在搜索的字符串“t”的pattern2,则Pattern1将帮助您匹配完整的String,并忽略其余的字符串。 两种方法没有太大区别,并且对于返回true / false的特定用例,两种方式都可以正常运行。 如果您对用例进行进一步更改,我建议的那个将帮助您即兴创建正则表达式