我正在编写一段代码,其中我必须找到完整的单词,例如,如果我有
String str = "today is tuesday";
我正在搜索“t”然后我找不到任何单词。
任何人都可以告诉我如何在java中编写这样的程序?
答案 0 :(得分:7)
我使用正则表达式执行此类任务。在你的情况下,它应该看起来像这样:
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是字边界。
答案 1 :(得分:5)
String sentence = "Today is Tuesday";
Set<String> words = new HashSet<String>(
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())
。
答案 2 :(得分:3)
String[] tokens = str.split(" ");
for(String s: tokens) {
if ("t".equals(s)) {
// t exists
break;
}
}
答案 3 :(得分:2)
String[] words = str.split(" ");
Arrays.sort(words);
Arrays.binarySearch(words, searchedFor);
答案 4 :(得分:1)
String str = "today is tuesday";
StringTokenizer stringTokenizer = new StringTokenizer(str);
bool exists = false;
while (stringTokenizer.hasMoreTokens()) {
if (stringTokenizer.nextToken().equals("t")) {
exists = true;
break;
}
}
答案 5 :(得分:1)
使用像“\ bt \ b”这样的正则表达式。
答案 6 :(得分:0)
你可以通过放置一个以空格结尾的正则表达式来做到这一点。
答案 7 :(得分:0)
我建议您使用带有空格的String的"split"功能作为分隔符,然后逐个浏览这些元素并进行直接比较。
答案 8 :(得分:0)
我建议使用此正则表达式pattern1 =“。 \ bt \ b。”而不是pattern2 =“。?\ bt \ b。?” 。如果在该字符串中出现't'而不是刚刚到达您正在搜索的字符串“t”的pattern2,则Pattern1将帮助您匹配完整的String,并忽略其余的字符串。两种方法没有太大区别,并且对于返回true / false的特定用例,两种方式都可以正常运行。我建议的那个将帮助您即兴创建正则表达式,以防您在用例中进行进一步更改