2013-03-11 15 views
12

Wie konvertiert man eine Zeichenfolge ohne Trennzeichen zu einem ArrayList<Character>.konvertieren Zeichenfolge in Arraylist <Character> in Java

Mein String ist wie folgt:

String str = "abcd..." 

Ich kenne einen Weg, dies zu tun, den String in char[] zuerst konvertiert und dann wandelt die char []-ArrayList <Character>.

Gibt es einen besseren Weg, dies zu tun? wie direkt konvertieren? In Anbetracht von Zeit und Leistung, weil ich mit einer großen Datenbank arbeite.

+0

Also ... möchten Sie die implizite Zeichenfolge und konvertieren Sie jedes Zeichen in eine Sammlung von irgendeiner Art? Wenn das der Fall ist, was hast du probiert? Ein Beispielcode wäre von Vorteil. – Makoto

+0

Möchten Sie wirklich in 'ArrayList' konvertieren oder die Zeichenfolge in' List' umwandeln, die von der ursprünglichen Zeichenkette unterstützt wird? –

+0

@Makoto Ich habe 'char [] chars = str.toCharArray(); ArrayList Mylist = neue ArrayList (); für (char c: Zeichen) mylist.add (c); ' –

Antwort

2

Wenn Sie dn nicht Liste ändern müssen, nachdem es erstellt, wahrscheinlich der bessere Weg wäre Zeichenfolge in die Klasse zu wickeln List<Character> Schnittstelle wie diese Umsetzung:

import java.util.AbstractList; 
import java.util.List; 

public class StringCharacterList extends AbstractList <Character> 
{ 
    private final String string; 

    public StringCharacterList (String string) 
    { 
     this.string = string; 
    } 

    @Override 
    public Character get (int index) 
    { 
     return Character.valueOf (string.charAt (index)); 
    } 

    @Override 
    public int size() 
    { 
     return string.length(); 
    } 
} 

Und dann diese Klasse wie folgt verwenden:

List <Character> l = new StringCharacterList ("Hello, World!"); 
System.out.println (l); 
+0

Danke, aber was ich brauche, ist eine ArrayList :) –

1
public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     String str = "abcd..."; 
     ArrayList<Character> a=new ArrayList<Character>(); 
     for(int i=0;i<str.length();i++) 
     { 
      a.add(str.charAt(i)); 

     } 
     System.out.println(a); 
    } 
+0

Danke, ich habe es so versucht, wie ich in meinem Beitrag erwähnt habe. –

10

Sie müssen es so hinzufügen.

String str = "abcd..."; 
ArrayList<Character> chars = new ArrayList<Character>(); 
for (char c : str.toCharArray()) { 
    chars.add(c); 
} 
+0

Gut. Ich glaube nicht, dass es funktioniert. str.toCharArray() gibt char [] zurück, während Sie es einer ArrayList mit dem Typ Character zuweisen. Um genau zu sein, können Sie ein Array von Primitiven nicht in eine ArrayList konvertieren. –

+0

@aga_pan Aktualisiert. – squiguy

+0

Dies sollte funktionieren :), aber wie bereits erwähnt, haben Sie die Zeichenfolge zuerst in ein char-Array konvertiert und dann einzeln hinzugefügt, um die ArrayList zu erhalten. Ich denke über die Platz- und Zeitkosten nach, während die Zeichenfolge sehr groß ist und die Anzahl der Zeichenfolgen in einer Datenbank ebenfalls sehr groß ist. –

0

Sie können es wie folgt tun:

import java.util.ArrayList; 

public class YourClass{ 

    public static void main(String [] args){ 

     ArrayList<Character> char = new ArrayList<Character>(); 
     String str = "abcd..."; 

     for (int x = 0; x < str.length(); x ++){ 
      char.add(str.charAt(x)); 
     } 
    } 
} 
0

Es gibt einzeilige guava Lösung:

Lists.charactersOf("hello"); 

Sie passieren kann ImmutableList zu Konstruktor ArrayList resultierenden aber darf ich fragen, warum Brauchen Sie genau ArrayList?

1

Entschuldigung für die Retrobumpe, aber das ist jetzt wirklich einfach!

Sie können dies einfach in Java 8 mit Streams tun! Versuchen Sie folgendes:

String string = "testingString"; 
List<Character> list = string.chars().mapToObj((i) -> Character.valueOf((char)i)).collect(Collectors.toList()); 
System.out.println(list); 

Sie müssen mapToObj verwenden, da chars() eine IntStream zurückgibt.

4

Verwenden Sie Lambda-Ausdruck, um dies zu tun.

String big_data = "big-data"; 
ArrayList<Character> chars 
     = new ArrayList<>(
       big_data.chars() 
       .mapToObj(e -> (char) e) 
       .collect(
         Collectors.toList() 
       ) 
     );  
Verwandte Themen