Java-如何解析特定单词的字符串中的单词

Java-如何解析特定单词的字符串中的单词,java,string,parsing,words,Java,String,Parsing,Words,在“嗨,你好吗?”这句话中,我该如何解析“嗨”这个词 或者在“你好吗?”中的“你好”一词的解析中 我想要的代码示例: String word = "hi"; String word2 = "how"; Scanner scan = new Scanner(System.in).useDelimiter("\n"); String s = scan.nextLine(); if(s.equals(word)) { System.out.println("Hey"); } if(s.equals(w

在“嗨,你好吗?”这句话中,我该如何解析“嗨”这个词 或者在“你好吗?”中的“你好”一词的解析中

我想要的代码示例:

String word = "hi";
String word2 = "how";
Scanner scan = new Scanner(System.in).useDelimiter("\n");
String s = scan.nextLine();
if(s.equals(word)) {
System.out.println("Hey");
}
if(s.equals(word2)) {
System.out.println("Hey");
}

要仅查找子字符串,可以使用
contains
indexOf
或任何其他变体:

如果您关心单词边界,那么
StringTokenizer
可能是一个好方法

然后,您可以对每个单词执行不区分大小写的检查(equalsIgnoreCase)。

看起来像是一项针对的作业<代码>包含将给出假阳性,例如,
“分期付款”

相反,我会去喝一杯。 将空格和逗号、句号等其他元素设置为分隔符。并记住在不区分大小写模式下进行比较


通过这种方式,您可以在“hi,他的测试进行得如何”中找到“hi”,而不会在“his”中得到假阳性,在“hi”中得到假阴性(以大写字母H开头)。

我会选择
java.util.StringTokenizer


或者,查看
java.util.regex
并使用正则表达式。

您可以将正则表达式传递给的
next()
方法。因此,您可以迭代输入中的每个单词(默认情况下,扫描器在空白处划界),并在获得匹配的情况下执行适当的处理。

您注意到当前版本存在什么问题?两个问题:您测试字符串的相等性,而不考虑行可能包含空格、逗号、,感叹号等,不考虑大小写。看到我的回答了吗?没有任何解释的直接投票?你是真的想提高自己,还是放弃自己的名声去伤害别人?嘿,对不起,我没看到下面还有其他答案:p我试过了,但似乎一点用都没有。。。我可能做错了什么?顺便说一句:当我使用“匹配”时,它会给我一个错误,所以我使用“匹配”+1,除非你需要双转义
\\b
,它才能正常工作。更新答案。
StringTokenizer
的javadoc包含以下语句:“
StringTokenizer
是一个遗留类,出于兼容性原因而保留,尽管在新代码中不鼓励使用它。建议任何寻求此功能的人使用
String
的拆分方法或
java.util.regex
包。”Simon Nickerson:感谢您指出这一点,我没有意识到。遗憾的是,他们支持
split
,因为这似乎可以提前完成所有工作。如果用户只是键入“嗨”,会发生什么"? 在它后面不再有“”了。@Custard:你试过了吗?对我来说,字符串标记器在
nextToken()
上正确地传递“hi”,我没有,(对不起),但我感兴趣!我明天就去!哇!这正是我要找的!顺便说一句:在我的实际版本中,我已经将它转换为小写,我只是为了这个问题简化了它!再次感谢!
if( s.contains( word ) ) {
   // ...
}

if( s.indexOf( word2 ) >=0 ) {
   // ...
}
if (Pattern.match("\\bhi\\b", stringToMatch)) { //...
StringTokenizer st = new StringTokenizer(
    "Hi, how are you?", 
    ",.:?! \t\n\r"       //whitespace and puntuation as delimiters
);
 while (st.hasMoreTokens()) {
     if(st.nextToken().equals("Hi")){
         //matches "Hi"
     }
 }