stackr
stackr

Reputation: 2742

Regex to split string on double quotes keep only content between quotes

sorry for the inaccurate Title, but i didn't know how to put it.

If my string would look like this:

1+"."+2+"abc"+3+","+12+"."

and I would like to get an array containing only the content between the "quotes"

.
abc
,
.

I would like to receive the above array.

How can i accomplish that?

Note: all values are random, only the double quotes are certain.

Example: string can also look like this:

23412+"11"+244+"11"+abc+"11"
result should be:
11
11
11

or

abc+"abc"+abcd+"abcd"
result should be:
abc
abcd

or

1+"."+2+"."+"."+"3"
result should be:
.
.
.

I hope that you can help.

Upvotes: 0

Views: 1398

Answers (4)

Amal Murali
Amal Murali

Reputation: 76646

Match instead of splitting:

"([^\"]+)"

RegEx Demo

Upvotes: 5

Nawar Khoury
Nawar Khoury

Reputation: 180

I think it is very simple to write a method that does that and use it as a utility in your program... here's an example:

import java.util.ArrayList;


public class Test
{
    public static void main(String[] args)
    {
        String str = "23412+\"11\"+244+\"11\"+abc+\"11\"\"abcd\"pqrs";
        int i=0;
        ArrayList<String> strList = new ArrayList<String>();
        while (i<str.length())
        {
            if(str.charAt(i) == '\"')
            {
                int temp = i;
                do
                {
                    i++;
                }
                while (str.charAt(i) != '\"');

                strList.add(str.substring(temp+1, i));
            }
            i++;
        }
        for(int j=0; j<strList.size(); j++)
        {
            System.out.println(strList.get(j));
        }
    }
}

you can change it to return the ArrayList instead of printing it and then you have the perfect utility to do the job

Upvotes: 0

Utku &#214;zdemir
Utku &#214;zdemir

Reputation: 7725

I know you want regex, but if you can also do it without regex:

public static void main(String[] args) {
        String yourString = "23412+\"11\"+244+\"11\"+abc+\"11\"";
        String result = "";
        String[] splitted = yourString.split("\"");
        if (splitted.length > 0) {
            for (int i = 1; i < splitted.length; i += 2) {
                result += splitted[i] + System.lineSeparator();
            }
            result = result.trim();
        }
        System.out.println(result);
    }

You can use StringBuilder for long strings.

Upvotes: 0

TheLostMind
TheLostMind

Reputation: 36304

Use this regex :

public static void main(String[] args) {
    String s = "23412+\"11\"+244+\"11\"+abc+\"11\"\"abcd\"pqrs";
    Pattern p = Pattern.compile("\"(.*?)\""); \\ lazy quantifier
    Matcher m = p.matcher(s);
    while (m.find()) {
        System.out.println(m.group(1));
    }
}

O/P :

11
11
11
abcd

Upvotes: 1

Related Questions