James Fazio
James Fazio

Reputation: 6450

How to split a comma-separated string?

I have a String with an unknown length that looks something like this

"dog, cat, bear, elephant, ..., giraffe"

What would be the optimal way to divide this string at the commas so each word could become an element of an ArrayList?

For example

List<String> strings = new ArrayList<Strings>();
// Add the data here so strings.get(0) would be equal to
// "dog",strings.get(1) would be equal to "cat" a.s.f.

Upvotes: 254

Views: 871683

Answers (16)

npinti
npinti

Reputation: 52185

You could do this:

String str = "...";
List<String> elephantList = Arrays.asList(str.split(", "));

In Java 9+, create an unmodifiable list with List.of.

List<String> elephantList = List.of(str.split(", "));  // Unmodifiable list. 

Basically the .split() method will split the string according to (in this case) delimiter you are passing and will return an array of strings.

However, you seem to be after a List of Strings rather than an array. So the array must be turned into a list. We can turn that array into a List object by calling either Arrays.asList() or List.of.


FYI you could also do something like so:

String str = "...";
ArrayList<String> elephantList = new ArrayList<>(Arrays.asList(str.split(","));

But it is usually better practice to program to an interface rather than to an actual concrete implementation. So I would not recommend this approach.

Upvotes: 408

Prappo
Prappo

Reputation: 892

You can split it and make an array then access like an array:

String names = "prappo,prince";
String[] namesList = names.split(",");

You can access it with its indexes

String name1 = namesList [0];
String name2 = namesList [1];

or using a loop

for(String name : namesList){
    System.out.println(name);
}

Upvotes: 44

Shankar Patil SP
Shankar Patil SP

Reputation: 11

Easy and Short solution:-

String str="test 1 ,test 2 , test 3";

List<String> elementList = Arrays.asList(str.replaceAll("\\s*,\\s*", ",").split(","));

Output=["test 1","test 2","test 3"]

It will working for all cases.

Thanks me later :-)

Upvotes: 1

CamelTM
CamelTM

Reputation: 1250

"Old school" (JDK1.0) java.util Class StringTokenizer :

StringTokenizer(String str, String delim)

import java.util.*;

public class Tokenizer {
        public static void main(String[] args) {
                String str = "dog, cat, bear, elephant, ..., giraffe";
                StringTokenizer tokenizer = new StringTokenizer(str, ",");

                List<String> strings = new ArrayList<String>();

                while (tokenizer.hasMoreTokens()) {
                        // if need to trim spaces .trim() or use delim like ", "
                        String token = tokenizer.nextToken().trim();
                        strings.add(token);
                }
                // test output
                strings.forEach(System.out::println);
        }
}

NB: StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.

Example:

import java.util.regex.*;
...
// Recommended method<?>
Pattern commaPattern = Pattern.compile("\\s*,\\s*");
String[] words = commaPattern.split(str);
List<String> wordList = new ArrayList<String>(Arrays.asList(words));

// test output
wordList.forEach(System.out::println);
...

Upvotes: 0

Sandun Susantha
Sandun Susantha

Reputation: 1140

This is an easy way to split string by comma,

import java.util.*;

public class SeparatedByComma{
public static void main(String []args){
     String listOfStates = "Hasalak, Mahiyanganaya, Dambarawa, Colombo";
     List<String> stateList = Arrays.asList(listOfStates.split("\\,"));
     System.out.println(stateList);
 }
}

Upvotes: 0

panayot_kulchev_bg
panayot_kulchev_bg

Reputation: 796

in build.gradle add Guava

    compile group: 'com.google.guava', name: 'guava', version: '27.0-jre'

and then

    public static List<String> splitByComma(String str) {
    Iterable<String> split = Splitter.on(",")
            .omitEmptyStrings()
            .trimResults()
            .split(str);
    return Lists.newArrayList(split);
    }

    public static String joinWithComma(Set<String> words) {
        return Joiner.on(", ").skipNulls().join(words);
    }

enjoy :)

Upvotes: 2

Kishan Solanki
Kishan Solanki

Reputation: 14618

In Kotlin,

val stringArray = commasString.replace(", ", ",").split(",")

where stringArray is List<String> and commasString is String with commas and spaces

Upvotes: 1

Abhishek Sengupta
Abhishek Sengupta

Reputation: 3291

Use this :

        List<String> splitString = (List<String>) Arrays.asList(jobtype.split(","));

Upvotes: 0

Tarit Ray
Tarit Ray

Reputation: 994

Can try with this worked for me

 sg = sg.replaceAll(", $", "");

or else

if (sg.endsWith(",")) {
                    sg = sg.substring(0, sg.length() - 1);
                }

Upvotes: 2

Diego Cortes
Diego Cortes

Reputation: 184

You can use something like this:

String animals = "dog, cat, bear, elephant, giraffe";

List<String> animalList = Arrays.asList(animals.split(","));

Also, you'd include the libs:

import java.util.ArrayList;
import java.util.Arrays; 
import java.util.List;

Upvotes: 0

sdc
sdc

Reputation: 3041

Remove all white spaces and create an fixed-size or immutable List (See asList API docs)

final String str = "dog, cat, bear, elephant, ..., giraffe";
List<String> list = Arrays.asList(str.replaceAll("\\s", "").split(","));
// result: [dog, cat, bear, elephant, ..., giraffe]

It is possible to also use replaceAll(\\s+", "") but maximum efficiency depends on the use case. (see @GurselKoca answer to Removing whitespace from strings in Java)

Upvotes: 0

Jonik
Jonik

Reputation: 81761

For completeness, using the Guava library, you'd do: Splitter.on(",").split(“dog,cat,fox”)

Another example:

String animals = "dog,cat, bear,elephant , giraffe ,  zebra  ,walrus";
List<String> l = Lists.newArrayList(Splitter.on(",").trimResults().split(animals));
// -> [dog, cat, bear, elephant, giraffe, zebra, walrus]

Splitter.split() returns an Iterable, so if you need a List, wrap it in Lists.newArrayList() as above. Otherwise just go with the Iterable, for example:

for (String animal : Splitter.on(",").trimResults().split(animals)) {
    // ...
}

Note how trimResults() handles all your trimming needs without having to tweak regexes for corner cases, as with String.split().

If your project uses Guava already, this should be your preferred solution. See Splitter documentation in Guava User Guide or the javadocs for more configuration options.

Upvotes: 3

Mawhrin-Skel
Mawhrin-Skel

Reputation: 1

There is a function called replaceAll() that can remove all whitespaces by replacing them with whatever you want. As an example

String str="  15. 9 4;16.0 1"
String firstAndSecond[]=str.replaceAll("\\s","").split(";");
System.out.println("First:"+firstAndSecond[0]+", Second:"+firstAndSecond[1]);

will give you:

First:15.94, Second:16.01

Upvotes: -1

hash
hash

Reputation: 5406

First you can split names like this

String animals = "dog, cat, bear, elephant,giraffe";

String animals_list[] = animals.split(",");

to Access your animals

String animal1 = animals_list[0];
String animal2 = animals_list[1];
String animal3 = animals_list[2];
String animal4 = animals_list[3];

And also you want to remove white spaces and comma around animal names

String animals_list[] = animals.split("\\s*,\\s*");

Upvotes: 3

user872858
user872858

Reputation: 780

A small improvement: above solutions will not remove leading or trailing spaces in the actual String. It's better to call trim before calling split. Instead of this,

 String[] animalsArray = animals.split("\\s*,\\s*");

use

 String[] animalsArray = animals.trim().split("\\s*,\\s*");

Upvotes: 22

Tomasz Nurkiewicz
Tomasz Nurkiewicz

Reputation: 340733

Well, you want to split, right?

String animals = "dog, cat, bear, elephant, giraffe";

String[] animalsArray = animals.split(",");

If you want to additionally get rid of whitespaces around items:

String[] animalsArray = animals.split("\\s*,\\s*");

Upvotes: 175

Related Questions