Gnaniyar Zubair
Gnaniyar Zubair

Reputation: 8166

Find Text Between two words in Java

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

Answers (4)

djangofan
djangofan

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

Brian Agnew
Brian Agnew

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

Chathuranga Chandrasekara
Chathuranga Chandrasekara

Reputation: 20916

Just use indexOf and subString Methods

Upvotes: -1

cletus
cletus

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

Related Questions