Reputation: 8166
I want to get all text in between 2 words wherver it is. For example:
String Testing="one i am here fine two one hope your are also fine two one ok see you two";
From the above string, I want to fetch the words between "one" and "two" in array:
My result should be stored in array like this:
String result[1] = i am here fine
String result[2] = hope your are also fine
String result[3] = ok see you
How to do in java?
Thanks in advance
Upvotes: 6
Views: 15780
Reputation: 29669
Easiest way (written for Groovy shell), minus any error handling:
public String textBetweenWords(String sentence, String firstWord, String secondWord)
{
return sentence.substring(sentence.indexOf(firstWord) + firstWord.length(),
sentence.indexOf(secondWord));
}
String between = textBetweenWords("Hello my dear cousin!", "Hello", "cousin");
println("[" + between + "]")
Upvotes: 4
Reputation: 272297
Check out the Java Pattern class that allows you to use regular expressions to identify substrings and consequently split up a larger string. You need something like
Pattern.compile("\bone\B");
to identify 'one'. The \b
and \B
are word boundary matches. You need these so you don't accidentally match on "someone" rather than the word "one" (as an aside, I'd recommend a different delimiter rather than the words "one", "two" etc.)
Upvotes: 1
Reputation: 625097
String input = "one i am here fine two one hope your are also fine two one ok see you two;";
Pattern p = Pattern.compile("(?<=\\bone\\b).*?(?=\\btwo\\b)");
Matcher m = p.matcher(input);
List<String> matches = new ArrayList<String>();
while (m.find()) {
matches.add(m.group());
}
This will create a List of all the text between "one" and "two".
If you want a simpler version that doesn't use lookaheads/lookbehinds try:
String input = "one i am here fine two one hope your are also fine two one ok see you two;";
Pattern p = Pattern.compile("(\\bone\\b)(.*?)(\\btwo\\b)");
Matcher m = p.matcher(input);
List<String> matches = new ArrayList<String>();
while (m.find()) {
matches.add(m.group(2));
}
Note: Java arrays are zero-based not one-based so in your example the first result would be in result[0]
not result[1]
. In my solution, the first match is in matches.get(0)
.
Upvotes: 9