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

在java字符串中查找完整的单词,java,Java,我正在写一段代码,在其中我只能找到完整的单词,例如,如果我有 String str = "today is tuesday"; 我在搜索“t”,那么我应该找不到任何单词 有谁能告诉我如何用java编写这样的程序吗?你可以通过放置一个以空格结尾的正则表达式来实现这一点。你可以通过放置一个以空格结尾的正则表达式来实现这一点。我建议你使用带有空格的字符串作为分隔符的功能,然后逐个检查这些元素并进行直接比较。我建议您使用带空格的字符串功能作为分隔符,然后逐个检查这些元素并进行直接比较。字符串句子=“今

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

String str = "today is tuesday";
我在搜索“t”,那么我应该找不到任何单词


有谁能告诉我如何用java编写这样的程序吗?

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

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

我建议你使用带有空格的字符串作为分隔符的功能,然后逐个检查这些元素并进行直接比较。

我建议您使用带空格的字符串功能作为分隔符,然后逐个检查这些元素并进行直接比较。

字符串句子=“今天是星期二”;
String[] words = str.split(" ");
Arrays.sort(words);
Arrays.binarySearch(words, searchedFor);
Set words=新HashSet( Arrays.asList(句子.split(“”) ); System.out.println(words.contains(“Tue”);//打印“假” System.out.println(words.contains(“星期二”);//打印“真实”
每个
包含(单词)
查询都是
O(1)
,因此除了实现自己复杂的字典数据结构之外,如果您在文本中有许多单词要查找,这是最快最实用的解决方案

这用于将单词从“
分隔符上的句子中分离出来。根据问题的定义,其他可能的变化是使用
\b
,即单词边界锚。如果你必须考虑自然语言的每一个语法特征(例如,
“can”
\b
分为
“can”
“t”
),那么这个问题就要困难得多

使用传统的大小写规范化技巧可以很容易地引入大小写不敏感:拆分并散列
语句.toLowerCase()
,然后查看它是否包含(word.toLowerCase())

另见
String-sense=“今天是星期二”;
Set words=新HashSet(
Arrays.asList(句子.split(“”)
);
System.out.println(words.contains(“Tue”);//打印“假”
System.out.println(words.contains(“星期二”);//打印“真实”
每个
包含(单词)
查询都是
O(1)
,因此除了实现自己复杂的字典数据结构之外,如果您在文本中有许多单词要查找,这是最快最实用的解决方案

这用于将单词从“
分隔符上的句子中分离出来。根据问题的定义,其他可能的变化是使用
\b
,即单词边界锚。如果你必须考虑自然语言的每一个语法特征(例如,
“can”
\b
分为
“can”
“t”
),那么这个问题就要困难得多

使用传统的大小写规范化技巧可以很容易地引入大小写不敏感:拆分并散列
语句.toLowerCase()
,然后查看它是否包含(word.toLowerCase())

另见

使用类似于“\bt\b”的正则表达式。

使用类似于“\bt\b”的正则表达式。

我使用正则表达式执行此类任务。在您的情况下,它应该如下所示:

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是单词边界


关于regexp的更多信息可以在这里找到,或者专门针对java

我使用regexp来完成这些任务。在您的情况下,它应该如下所示:

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是单词边界


可以找到关于regexp的更多信息,或者专门针对java

我建议使用此regex pattern1=“.\bt\b.”而不是pattern2=“.?\bt\b.”。如果字符串中出现“t”,而不是刚好到达正在搜索的字符串“t”并忽略字符串其余部分的模式2,则模式1将帮助您匹配整个字符串。这两种方法没有太大区别,对于您的特定用例,返回true/false两种方法都可以很好地运行。我建议的一个将帮助您临时编写正则表达式,以防您在用例中进行进一步更改

我建议使用此正则表达式模式1=“。\bt\b.”而不是模式2=“。?\bt\b.”。如果字符串中出现“t”,而不是刚好到达正在搜索的字符串“t”并忽略字符串其余部分的模式2,则模式1将帮助您匹配整个字符串。这两种方法没有太大区别,对于您的特定用例,返回true/false两种方法都可以很好地运行。我建议的一个将帮助您临时编写正则表达式,以防您在用例中做进一步的更改

您能写下正则表达式吗?这不会发现以t结尾的单词吗?更好的是,使用单词边界模式,如我的示例中所示(例如,句子末尾的单词后面没有空格).你能写下正则表达式吗?这不会发现以t结尾的单词吗?最好使用单词边界模式,如我的示例中所示(例如,句子末尾的单词后面没有空格)。回答/解决问题时不要删除。我已经把它翻过来了。如果您的问题已解决,则只需评论或添加更新,并更新有助于解决问题的有用答案,并接受最有用的答案。回答/解决问题时不要删除问题。我已经把它翻过来了。如果您的问题已解决,则只需评论或添加更新,并更新有助于解决问题的答案,并接受最有帮助的答案。从“该类为基本操作提供恒定时间性能(
add
remove
contains
size
),假设散列函数将元素正确地分散在存储桶中?我不
    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"
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"