쉼표로 구분 된 문자열을 나누는 방법?


202

길이가 알 수없는 문자열이 있습니다.

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

각 단어를 ArrayList의 요소가 될 수 있도록이 문자열을 쉼표로 나누는 가장 좋은 방법은 무엇입니까?

예를 들어

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" and so forth.

1
split ( "spliting char") 메소드를 사용하면 문자열이 분할됩니다. nad 메소드는 쪼개진 단어로 문자열 배열을 만듭니다.
Simon Dorociak

답변:


343

당신은 이것을 할 수 있습니다 :

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

기본적 .split()으로이 방법은 전달하는 구분 기호에 따라 문자열을 분할하고 문자열 배열을 반환합니다.

그러나 배열이 아닌 문자열 목록 뒤에있는 것처럼 보이므로 Arrays.asList()유틸리티 를 사용하여 배열을 목록으로 바꿔야 합니다. 참고로 다음과 같이 할 수도 있습니다.

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

그러나 실제 실제 구현보다는 인터페이스에 프로그래밍하는 것이 일반적으로 더 좋습니다. 따라서 첫 번째 옵션을 권장합니다.


9
이것은 값을 자르지 않으므로 strings.get (1)은 "cat"이 아닌 "cat"이됩니다.
Alb

45
str.split정규식을 허용하므로 str.split(",[ ]*");쉼표 뒤에 공백과 쉼표를 제거 하여 사용할 수 있습니다.
vertti

4
쉼표로 구분 된 파일 (csv)은 따옴표로 묶인 쉼표를 가질 수 있으며 이는 구분자가 아님을 의미합니다. 이 경우 스플릿이 작동하지 않습니다.
Steven Trigg

2
두 번째 옵션은으로 캐스팅해야 ArrayList<String>합니다.
C_B

3
빈 항목을 유지해야하는 경우 (예 : 일관된 배열 길이) stackoverflow.com/questions/14602062/…에
Fast Engy

157

음, 당신은 분할 하고 싶 습니까?

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

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

항목 주위에 공백을 추가로 제거하려면 다음을 수행하십시오.

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

네, 솔루션의 일부입니다. OP는 배열이 아닌 문자열 목록 뒤에있는 것으로 보입니다.
npinti

@ npinti : 네, +1 당신은 더 빨랐고 나는 당신의 Arrays.asList()관용구 를 복사하고 싶지 않았습니다 .
Tomasz Nurkiewicz

1
나는 10 시간 동안 계속 생각한 다음 SO를 검색했습니다. .split ();이 너무 쉽다는 것을 몰랐다.
DeathRs

결과 분할 항목을 배열이 아닌 세트에 저장하려면 어떻게해야합니까?
모세 Kirathe

29

분할하고 배열을 만든 다음 배열처럼 액세스 할 수 있습니다

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

당신은 같은 액세스 할 수 있습니다

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

또는 루프를 사용하여

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

그것이 당신을 도울 것입니다 바랍니다.


18

약간의 개선 : 위의 솔루션은 실제 문자열에서 선행 또는 후행 공백을 제거하지 않습니다. 스플릿을 호출하기 전에 트림을 호출하는 것이 좋습니다. 이 대신에

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

사용하다

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

1
두 번째 줄의 경우 trim ()을 ("\\s*,\\s*")사용 (",");하면 공간 분할이 필요하지 않습니다 . 이렇게하면 결과가 동일합니다.
마법사

5
trim은 문자열의 왼쪽과 오른쪽 공간 만 제거하고 그 안에 공백은 제거하지 않기 때문에 @WIZARD를 확신하지 못합니다. 그래서 trim(" string, with , space ")것입니다 "string, with , space".
Thomas Leduc

@ThomasLeduc 문자열이 "dog, cat, bear, elephant, giraffe"다음 과 같으면 필요하지 않으며 trim()경우에 따라 사용 trim()하면 출력 "string,with,space"되지 않습니다"string, with , space"
WIZARD

trim()모든 공백을 제거합니다 단지 왼쪽과 문자열의 우측 공간이 없습니다
마법사

5
당신은 그것을 테스트합니까? 방금 java 프로그램과 문자열 " string, with , space ".trim()return을 작성했기 때문 "string, with , space"입니다. javadoc과 같이 : 선행 및 후행 공백이 생략 된 문자열 사본을 리턴합니다. 당신이 잘못하고 @ user872858이 맞습니다.
Thomas Leduc

3

먼저 이런 식으로 이름을 나눌 수 있습니다

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

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

동물에게 접근하기

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

또한 동물 이름 주위의 공백과 쉼표를 제거하고 싶습니다.

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

3

완전성을 위해 Guava 라이브러리를 사용하면 다음을 수행 할 수 있습니다. Splitter.on(",").split(“dog,cat,fox”)

다른 예시:

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()Iterable을 리턴하므로 List가 필요한 경우 Lists.newArrayList()위와 같이 랩핑하십시오 . 그렇지 않으면 Iterable을 사용하십시오.

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

참고 어떻게 trimResults()핸들 모든는하지 않고 요구를 트리밍 코너 케이스에 대한 정규 표현식에 조정할 와 마찬가지로 String.split().

프로젝트에서 이미 구아바를 사용하는 경우 이것이 선호하는 솔루션입니다. 자세한 구성 옵션 은 Guava 사용 설명서 또는 javadocs의 스플리터 설명서를 참조하십시오 .


2

이것으로 나를 위해 노력할 수 있습니까?

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

그렇지 않으면

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

1

build.gradle에서 구아바 추가

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

그리고

    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);
    }

즐겨 :)


0

모든 공백을 제거하고 고정 크기 또는 변경 불가능한 목록을 작성 하십시오 ( asList API 문서 참조 ).

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

사용하는 것도 가능 replaceAll(\\s+", "")하지만 최대 효율은 사용 사례에 따라 다릅니다. (@GurselKoca의 참조 대답자바 문자열에서 공백을 제거 )


0

다음과 같은 것을 사용할 수 있습니다.

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

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

또한 libs를 포함시킵니다.

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


0

코 틀린에서

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

어디에 stringArray이다 List<String>하고 commasString있다 String콤마와 공백


0

이것은 문자열을 쉼표로 나누는 쉬운 방법입니다.

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);
 }
}

이 코드는 JDK에 사용되었습니다. 그리고 배열을 인쇄 해야하는 경우. System.out.println 사용
Sandun Susantha

-1

replaceAll()모든 공백을 원하는 것으로 바꾸어 제거 할 수 있는 함수 가 있습니다. 예로서

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

당신에게 줄 것이다 :

First:15.94, Second:16.01
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.