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

时间:2010-05-04 13:05:53

标签: java

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

String str = "today is tuesday";

我正在搜索“t”然后我找不到任何单词。

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

9 个答案:

答案 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是字边界

有关正则表达式的更多信息,请参见here或专门针对java here

答案 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的特定用例,两种方式都可以正常运行。我建议的那个将帮助您即兴创建正则表达式,以防您在用例中进行进一步更改