简体   繁体   中英

Java- how to parse for words in a string for a specific word

How would I parse for the word "hi" in the sentence "hi, how are you?" or in parse for the word "how" in "how are you?"?

example of what I want in code:

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

To just find the substring, you can use contains or indexOf or any other variant:

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

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

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

If you care about word boundaries, then StringTokenizer is probably a good approach.

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

You can then perform a case-insensitive check (equalsIgnoreCase) on each word.

Looks like a job for Regular Expressions . Contains would give a false positive on, say, "hire-purchase" .

if (Pattern.match("\\bhi\\b", stringToMatch)) { //...

I'd go for the java.util.StringTokenizer : https://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"
     }
 }

Alternatively, take a look at java.util.regex and use regular expressions.

I'd go for a tokenizer , instead. Set space and other elements like commas, full stops etc. as delimiters. And rememeber to compare in case-insensitive mode.

This way you can find "hi" in "Hi, how is his test going" without getting a false positive on "his" and a false negative on "Hi" (starts with a uppercase H).

You can pass a regular expression to the next() method of Scanner . So you can iterate through each word in the input (Scanner delimits on whitespace by default) and perform the appropriate processing if you get a match.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM