[java] 문자열을 ArrayList로 변환하는 방법은 무엇입니까?

내 문자열에서 쉼표로 구분 된 임의의 수의 단어를 가질 수 있습니다. 각 단어를 ArrayList에 추가하고 싶었습니다. 예 :

String s = "a,b,c,d,e,.........";



답변

다음과 같은 시도

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

데모:

String s = "lorem,ipsum,dolor,sit,amet";

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

System.out.println(myList);  // prints [lorem, ipsum, dolor, sit, amet]

이 게시물은 여기 에 기사로 다시 작성되었습니다 .


답변

 String s1="[a,b,c,d]";
 String replace = s1.replace("[","");
 System.out.println(replace);
 String replace1 = replace.replace("]","");
 System.out.println(replace1);
 List<String> myList = new ArrayList<String>(Arrays.asList(replace1.split(",")));
 System.out.println(myList.toString());


답변

옵션 1 :

List<String> list = Arrays.asList("hello");

옵션 2 :

List<String> list = new ArrayList<String>(Arrays.asList("hello"));

제 생각에는 Option1이 더 좋습니다.

  1. 생성되는 ArrayList 객체의 수를 2 개에서 1 개로 줄일 수 있습니다. asList메소드는 ArrayList 객체를 생성하고 반환합니다.
  2. 성능이 훨씬 더 좋습니다 (그러나 고정 크기 목록을 반환합니다).

여기 에서 문서를 참조 하십시오


답변

Java 9에서는 List#ofImmutable List Static Factory Methods 인를 사용 하는 것이 더 간단 해졌습니다.

 String s = "a,b,c,d,e,.........";
 List<String> lst = List.of(s.split(","));


답변

가져 오는 중이거나 코드에 배열 (문자열 유형)이 있고이를 arraylist (오프 코스 문자열)로 변환해야하는 경우 컬렉션을 사용하는 것이 좋습니다. 이렇게 :

String array1[] = getIntent().getExtras().getStringArray("key1"); or String array1[] = ... then

List allEds = new ArrayList(); Collections.addAll(allEds, array1);


답변

Ok 여기에 오는 많은 사람들이 문자열을 공백 으로 나누고 싶어하기 때문에 여기에 대한 답변을 확장하겠습니다 . 이것이 수행되는 방법입니다.

List<String> List = new ArrayList<String>(Arrays.asList(s.split("\\s+")));


답변

다음을 사용할 수 있습니다.

List<String> tokens = Arrays.stream(s.split("\\s+")).collect(Collectors.toList());

처음에 ArrayList가 정말로 필요한지 스스로에게 물어봐야합니다. 매우 자주, 추가 기준에 따라 목록을 필터링 할 것입니다. 세트를 원할 수 있습니다. 다른 정규 표현식 등을 사용하여 필터링 할 수 있습니다. Java 8은 다음과 같은 매우 유용한 확장 기능을 제공합니다 CharSequence. https://docs.oracle.com/javase/8/docs/api /java/util/regex/Pattern.html#splitAsStream-java.lang.CharSequence- . 배열이 전혀 필요하지 않으므로 다음과 같이 생성하지 마십시오.

// This will presumably be a static final field somewhere.
Pattern splitter = Pattern.compile("\\s+");
// ...
String untokenized = reader.readLine();
Stream<String> tokens = splitter.splitAsStream(untokenized);