0

我想知道一个字符串是否是一个精确的词,但是例如如果我这样做:

String s1="Welcome";
String s ="Welcomes to Tutorialspoint.com";
System.out.println(s.contains(s1));

它返回 true,但我希望你给我返回 false,因为在s带有单词Welcomes而不是单词的变量Welcomes1。我该如何进行?

4

6 回答 6

10

您可以使用

Arrays.asList(s.split("\\s+")).contains(s1)

您可以通过调整用于拆分的正则表达式来修改此解决方案以满足您的需求。例如,如果您想拆分任何不是单词字符(即标点符号等),您可以使用\W+.

于 2013-09-04T14:38:28.483 回答
3

将 `.matches()` 与以下正则表达式一起使用:

System.out.println(s.matches(".*\\b" + s1 + "\\b.*"));

有关更多信息,请参阅本教程此问题

另外,如果你想忽略大小写,你可以这样做:

System.out.println(s.toUpperCase().matches(".*\\b" + s1.toUpperCase() + "\\b.*"))
于 2013-09-04T14:49:21.657 回答
2

您可以拆分句子,然后将每个单词与 进行比较s1

String s1="Welcome";
String s ="Welcomes to Tutorialspoint.com";
String[] split = s.split(" ");
for (String s : split) {
  if (s.equals(s1)) {
    System.out.println(s);
    break; //optional
  }
}
于 2013-09-04T14:37:48.620 回答
1

你可以试试

s.matches(".*\\b" + s1 + "\\b.*")

使用"\\b"来查找单词边界。

于 2013-09-04T14:49:02.937 回答
0

使用StringTokenizer将字符串标记为组成词。然后将每个单词与 s1 进行比较。

于 2013-09-04T14:39:18.720 回答
0

对于比使用简单的字符串解析和/或正则表达式更高级的东西,您可以看看Lucene 如何解析和分析文本。

我怀疑它超出了您的需要,并且它添加了一个依赖项来做一些在您的情况下非常简单的事情。

于 2013-09-04T14:45:58.563 回答