简体   繁体   中英

Split a string using split method

I have tried to split a string using split method, but I'm facing some problem in using split method.

String str="1-DRYBEANS,2-PLAINRICE,3-COLDCEREAL,4-HOTCEREAL,51-ASSORTEDETHNIC,GOURMET&SPECIALTY";

List<String> zoneArray = new ArrayList<>(Arrays.asList(zoneDescTemp.split(",")));

Actual output:

zoneArray = {"1-DRYBEANS","2-PLAINRICE","3-COLDCEREAL","4-HOTCEREAL","51-ASSORTEDETHNIC","GOURMET&SPECIALTY"}

Expected output:

zoneArray = {"1-DRYBEANS","2-PLAINRICE","3-COLDCEREAL","4-HOTCEREAL","51-ASSORTEDETHNIC,GOURMET&SPECIALTY"}

Any help would be appreciated.

Use split(",(?=[0-9])")

You are not just splitting by comma, but splitting by comma only if it is followed by a digit from 0-9. This is also known as positive lookahead (?=) .

Take a look at this code snippet for example:

public static void main(String[] args) {
        String str="1-DRYBEANS,2-PLAINRICE,3-COLDCEREAL,4-HOTCEREAL,51-ASSORTEDETHNIC,GOURMET&SPECIALTY";

        String[] array1= str.split(",(?=[0-9])");
        for (String temp: array1){
            System.out.println(temp);
        }
    }
}

Use a look-ahead within your regex, one that uses comma (not in the look-ahead), followed by a number (in the look-head). \\d+ will suffice for number. The regex can look like:

String regex = ",(?=\\d+)";

For example:

public class Foo {
    public static void main(String[] args) {
        String str = "1-DRYBEANS,2-PLAINRICE,3-COLDCEREAL,4-HOTCEREAL,51-ASSORTEDETHNIC,GOURMET&SPECIALTY";
        String regex = ",(?=\\d+)";
        String[] tokens = str.split(regex);
        for (String item : tokens) {
            System.out.println(item);
        }
    }
}

what this does is split on a comma that is followed by numbers, but does not remove from the output, the numbers since they are part of the look-ahead.

For more on look-ahead, look-behind and look-around, please check out this relevant tutorial page .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM