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


101

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

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

답변:


251

다음과 같은 시도

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]

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


9
+1 : new ArrayList<String>()사용 방법에 따라 중복 될 수 있습니다. (당신의 예에서와 같이)
피터 Lawrey

1
그래, 헤헤, +1 :-) 실제로 심지어 그냥있을 수 있습니다 split자신의 후 : P
aioobe

그는 Arrays.toString()그것을 인쇄하기 위해 사용해야 할 것이지만 그렇습니다.
Peter Lawrey 2011 년

새로운 ArrayList <String> ()은 그 안에 반환 된 목록을 포함하는 새 목록을 생성합니다. Arrays.asList (a)는 List 객체를 반환하므로 새 ArrayList를 호출하지 않으면 원하지 않는 동작이 발생합니다.
Clocker 2014

6
Arrays.asList에서 반환 된 목록에 요소를 추가 할 수 없습니다. OP는 ArrayList (완전히 합리적)를 원했고 ArrayList 구성 필요합니다.
aioobe 2014

32
 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());

8
당신이 트림 브래킷이있는 경우, 당신은 하나의 단계에서 그것을 할 수replace = s1.replaceAll("^\\[|]$", "");
데이비드 Ehrmann

9

옵션 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. 성능이 훨씬 더 좋습니다 (그러나 고정 크기 목록을 반환합니다).

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


이 작동하지 않는 이유는 List<Character> word1 = new ArrayList<Character>(Arrays.asList(A[0].toCharArray()));문자열 배열의 첫 번째 문자열을 얻고 해당 문자열을 charArray로 변환하고 해당
charArray

그 이유는 Arrays 클래스의 asList 메서드는 기본 배열이 아닌 Object 배열 만 사용하기 때문입니다. char []를 Character [] 배열로 변환하면 작동합니다.
Andy

public static Character [] boxToCharacter (char [] charArray) {Character [] newArray = new Character [charArray.length]; int i = 0; for (char 값 : charArray) {newArray [i ++] = Character.valueOf (value); } return newArray; }
Andy

8

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

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

s.split("\\s*,\\s*")추가 관리를 위해 추가 가능
Vishwajit R. Shinde

2

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

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

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

2

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

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

2

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

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

1

문자열ArrayList 로 변환하려면 다음을 시도하십시오.

public ArrayList<Character> convertStringToArraylist(String str) {
    ArrayList<Character> charList = new ArrayList<Character>();      
    for(int i = 0; i<str.length();i++){
        charList.add(str.charAt(i));
    }
    return charList;
}

하지만 귀하의 예제에서 문자열 배열을 볼 수 있으므로 문자열 배열ArrayList 로 변환 하려면 다음을 사용하십시오.

public static ArrayList<String> convertStringArrayToArraylist(String[] strArr){
    ArrayList<String> stringList = new ArrayList<String>();
    for (String s : strArr) {
        stringList.add(s);
    }
    return stringList;
}

더 간단한 문자 기반 접근 방식은 다음과 같습니다. ArrayList <String> myList = new ArrayList <String> (); for (캐릭터 c : s.toCharArray ()) {myList.add (c.toString ()); } 그러나 나는 이것이 그 사람이 찾고있는 것이라고 생각하지 않는다. aioobe의 솔루션이 필요합니다. 환호
Steve

1

이해하기 쉬운 것은 다음과 같습니다.

String s = "a,b,c,d,e";
String[] sArr = s.split(",");
List<String> sList = Arrays.asList(sArr);

1

Kotlin에서 Gson을 사용하고 있습니다.

 val listString = "[uno,dos,tres,cuatro,cinco]"
 val gson = Gson()
 val lista = gson.fromJson(listString , Array<String>::class.java).toList()
 Log.e("GSON", lista[0])

0

질문을합시다 : 문자열을 뒤집습니다. 나는 stream (). collect ()를 사용하여 이것을 할 것이다. 하지만 먼저 문자열을 ArrayList로 변경합니다.

    public class StringReverse1 {
    public static void main(String[] args) {

        String a = "Gini Gina  Proti";

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

        list.stream()
        .collect(Collectors.toCollection( LinkedList :: new ))
        .descendingIterator()
        .forEachRemaining(System.out::println);



    }}
/*
The output :
i
t
o
r
P


a
n
i
G

i
n
i
G
*/

1
그래서 ... 다른 문제에 대한 예를 만들기 위해 허용 된 솔루션을 사용하고 있습니까? 왜?
Francesco B.

0

StringTokenizer를 사용하는 것이 좋습니다. 매우 효율적입니다.

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

     StringTokenizer token = new StringTokenizer(value, LIST_SEPARATOR);
     while (token.hasMoreTokens()) {
           list.add(token.nextToken());
     }

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