Java- how to parse for words in a string for a specific word
How would I parse for the word "hi" in th开发者_如何学JAVAe 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.
精彩评论