Jackson Curtis
Jackson Curtis

Reputation: 101

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

Upvotes: 4

Views: 13732

Answers (5)

Roland Bouman
Roland Bouman

Reputation: 31961

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.

Upvotes: 3

Ryan Emerle
Ryan Emerle

Reputation: 15811

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.

Upvotes: 7

Anon.
Anon.

Reputation: 59963

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

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

Upvotes: 5

Michael Hackner
Michael Hackner

Reputation: 8645

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.

Upvotes: 0

p.marino
p.marino

Reputation: 6252

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).

Upvotes: 0

Related Questions