4

我将如何解析句子“嗨,你好吗?”中的“嗨”这个词。或解析“你好吗?”中的“如何”一词?

我想要的代码示例:

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");
}
4

5 回答 5

7

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

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html

if( s.contains( word ) ) {
   // ...
}

if( s.indexOf( word2 ) >=0 ) {
   // ...
}

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

https://docs.oracle.com/javase/1.5.0/docs/api/java/util/StringTokenizer.html

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

于 2010-02-21T20:21:24.147 回答
5

看起来像是正则表达式的工作。Contains会给出一个误报,比如说,"hire-purchase"

if (Pattern.match("\\bhi\\b", stringToMatch)) { //...
于 2010-02-21T20:22:41.187 回答
3

我会去java.util.StringTokenizerhttps ://docs.oracle.com/javase/1.5.0/docs/api/java/util/StringTokenizer.html

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"
     }
 }

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

于 2010-02-21T20:26:41.327 回答
0

我会选择一个tokenizer,而不是。将空格和逗号、句号等其他元素设置为分隔符。并记住在不区分大小写模式下进行比较。

这样,您就可以在“Hi,他的测试进展如何”中找到“hi”,而不会在“his”上得到假阳性,在“Hi”上得到假阴性(以大写 H 开头)。

于 2010-02-21T20:24:40.293 回答
0

您可以将正则表达式传递next()Scanner. 因此,您可以遍历输入中的每个单词(扫描仪默认以空格分隔)并在匹配时执行适当的处​​理。

于 2010-02-21T21:53:32.007 回答