[java] 쉼표로 구분 된 문자열을 ArrayList로 변환하는 방법?

쉼표로 구분 된 문자열을 일부 컨테이너 (예 : 배열, 목록 또는 벡터)로 변환 할 수있는 내장 메소드가 Java에 있습니까? 아니면이를 위해 사용자 지정 코드를 작성해야합니까?

String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items = //method that converts above string into list??



답변

쉼표로 구분 된 문자열을 목록으로 변환

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

위의 코드는 다음과 같이 정의 된 구분 기호로 문자열을 분할합니다. 이렇게 zero or more whitespace, a literal comma, zero or more whitespace하면 단어가 목록에 배치되고 단어와 쉼표 사이의 공백이 축소됩니다.


유의하시기 바랍니다 단순히이 반환 배열에 래퍼 : 당신 CAN NOT 예를 들어 .remove()결과에서 List. 실제로 ArrayList는 추가로 사용해야 new ArrayList<String>합니다.


답변

Arrays.asList 고정 크기를 반환 List배열이 지원 . 정상적인 변경 가능을 원하면 java.util.ArrayList다음을 수행해야합니다.

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

또는 구아바를 :

List<String> list = Lists.newArrayList(Splitter.on(" , ").split(string));

를 사용 Splitter하면 문자열을 분할하는 방법에 더 많은 유연성을 제공하고 예를 들어 결과에서 빈 문자열을 건너 뛰고 결과를자를 수 있습니다. 또한 String.split정규 표현식으로 나눌 필요 가없는 것보다 이상한 행동이 적습니다 (단 하나의 옵션 일뿐입니다).


답변

두 단계 :

  1. String [] items = commaSeparated.split("\\s*,\\s*");
  2. List<String> container = Arrays.asList(items);

답변

CSV를 ArrayList로 변환하는 또 다른 방법은 다음과 같습니다.

String str="string,with,comma";
ArrayList aList= new ArrayList(Arrays.asList(str.split(",")));
for(int i=0;i<aList.size();i++)
{
    System.out.println(" -->"+aList.get(i));
}

당신을 인쇄합니다

-> 문자열
->와
-> 쉼표


답변

ListOP가 언급 한대로 a 가 최종 목표 인 경우 , 이미 승인 된 답변이 여전히 가장 짧고 가장 좋습니다. 그러나 Java 8 Streams를 사용하는 대안을 제공하고 싶습니다 . 추가 처리를위한 파이프 라인의 일부인 경우 더 많은 이점을 제공합니다.

.split 함수 (기본 배열)의 결과를 스트림에 래핑 한 다음 목록으로 변환합니다.

List<String> list =
  Stream.of("a,b,c".split(","))
  .collect(Collectors.toList());

ArrayListOP의 제목에 따라 결과를 저장 해야하는 경우 다른 Collector방법을 사용할 수 있습니다 .

ArrayList<String> list =
  Stream.of("a,b,c".split(","))
  .collect(Collectors.toCollection(ArrayList<String>::new));

또는 RegEx 구문 분석 API를 사용하여 :

ArrayList<String> list =
  Pattern.compile(",")
  .splitAsStream("a,b,c")
  .collect(Collectors.toCollection(ArrayList<String>::new));

list변수 List<String>대신을 입력 한 상태로 두는 것도 고려할 수 있습니다 ArrayList<String>. 에 대한 일반적인 인터페이스는 List여전히 ArrayList구현 과 충분히 유사합니다 .

이 코드 예제 자체는 많은 것을 추가하지 않는 것 같습니다 (더 많은 타이핑 제외) . 문자열을 Longs List로 변환하는 것에 대한이 답변 과 같이 더 많은 것을 계획하고 있다면 스트리밍 API는 실제로 강력합니다. 작업을 차례로 파이프 라인

완전성을 위해 알다시피


답변

List<String> items= Stream.of(commaSeparated.split(","))
     .map(String::trim)
     .collect(toList());


답변

이것에 대한 내장 메소드는 없지만 간단히 split () 메소드를 사용할 수 있습니다.

String commaSeparated = "item1 , item2 , item3";
ArrayList<String> items =
new  ArrayList<String>(Arrays.asList(commaSeparated.split(",")));