2013-08-16 11 views
12

Drukuję elementy z listy tablic, chcę mieć przecinek między każdym słowem oprócz ostatniego słowa. Teraz robię tak:Wydrukuj elementy z tablicy przecinkiem między elementami oprócz ostatniego słowa

for (String s : arrayListWords) { 
     System.out.print(s + ", "); 
    } 

Jak zrozumieć to wydrukować słowa tak: „jeden, dwa, trzy, cztery,” i problem jest ostatni przecinek, jak mogę rozwiązać to? Wszystkie odpowiedzi docenione!

poważaniem, Erica

+0

jestem ładna oczywiście możesz wywołać 'toString()' na swojej 'ArrayList' i to zwróci' toString() 'każdego elementu w twojej tablicy oddzielone przecinkiem. Jeśli nie podoba ci się '[' i ']', możesz je po prostu usunąć. Coś jak [to] (http://ideone.com/wBmvua) –

Odpowiedz

20

druku pierwsze słowo na własną rękę, jeśli istnieje. Następnie wydrukuj wzór najpierw jako przecinek, a następnie następny element.

if (arrayListWords.length >= 1) { 
    System.out.print(arrayListWords[0]); 
} 

// note that i starts at 1, since we already printed the element at index 0 
for (int i = 1; i < arrayListWords.length, i++) { 
    System.out.print(", " + arrayListWords[i]); 
} 

Z List, jesteś lepiej wyłączyć za pomocą Iterator

// assume String 
Iterator<String> it = arrayListWords.iterator(); 
if (it.hasNext()) { 
    System.out.print(it.next()); 
} 
while (it.hasNext()) { 
    System.out.print(", " + it.next()); 
} 
+0

Łatwo zrozumieć, idę z tym. Dzięki! –

+0

@ Orica Edytowałeś swój wpis, aby powiedzieć, że jest to lista tablic (lub źle ją przeczytałem). Będziesz musiał zmienić sposób iteracji, aby pasował do api "List". –

+0

Należy zauważyć, że jeśli 'arrayListWords' jest' LinkedList' zamiast 'ArrayList', to staje się rozwiązaniem' O (n^2) ', gdy powinno być' O (n) '. –

0

Można użyć Iterator na List aby sprawdzić, czy istnieją więcej elementów.

Następnie można dodać przecinek tylko wtedy, gdy bieżący element nie jest ostatnim elementem.

public static void main(String[] args) throws Exception { 
    final List<String> words = Arrays.asList(new String[]{"one", "two", "three", "four"}); 

    final Iterator<String> wordIter = words.iterator(); 
    final StringBuilder out = new StringBuilder(); 
    while (wordIter.hasNext()) { 
     out.append(wordIter.next()); 
     if (wordIter.hasNext()) { 
      out.append(","); 
     } 
    } 
    System.out.println(out.toString()); 
} 

Jednak jest to znacznie łatwiejsze w użyciu 3rd biblioteki strona jak Guava to zrobić dla ciebie. Następnie kod staje:

public static void main(String[] args) throws Exception { 
    final List<String> words = Arrays.asList(new String[]{"one", "two", "three", "four"}); 
    System.out.println(Joiner.on(",").join(words)); 
} 
+0

Kiedy będę bardziej doświadczony, przyjrzę się Guava, dziękuję. –

0

Można spróbować tej

List<String> listWords= Arrays.asList(arrayListWords); // convert array to List 
    StringBuilder sb=new StringBuilder(); 
    sb.append(listWords); 
    System.out.println(sb.toString().replaceAll("\\[|\\]","")); 
+0

Nie będę polegać na wartości 'toString' z' List' w logice programu. Może się to zmienić z implementacji na implementację, powodując złamanie kodu. –

+0

spowoduje to również usunięcie znaków ze słów, jeśli którekolwiek z nich zawiera słowo "[" lub "]", zmieni to słowo. – Asaf

2

podczas iteracji, można dołączyć String s do StringBuilder a na koniec można usunąć ostatnie 2 znaki, które jest dodatkowym , i przestrzeń (res.length() -2)

StringBuilder res = new StringBuilder(); 
for (String s : arrayListWords) { 
    res.append(s).append(", "); 
} 
System.out.println(res.deleteCharAt(res.length()-2).toString()); 
+0

Dzięki! – Roadies

1

można użyć standardowej funkcji w pakiecie java.util i re przesuń cytaty blokowe na początku i na końcu.

String str = java.util.Arrays.toString(arrayListWords); 
str = str.substring(1,str.length()-1); 
System.out.println(str); 
+0

Dobrze wiedzieć proszę pana, dziękuję! –

+0

Wygląda dobrze, ale jak stabilna jest specyfikacja toString? –

-1

Wystarczy użyć metody toString().

String s = arrayListWords.toString(); 
System.out.println(s); 

//This will print it like this: "[one, two, three, four]" 
//If you want to remove the brackets you can do so easily. Just change the way you print. 
+0

Czy możesz wyjaśnić "sposób drukowania"? Czy istnieje opcja drukowania bez nawiasów? –

+0

Użytkownik napisał, że jest listą tablic. Możesz użyć toString() na listach tablic. – Rohit

+0

Użyj tego: int length = s.length(); s = s.substring (1, długość); System.out.println (s); – Rohit

11

chciałbym napisać to w następujący sposób:

String separator = ""; // separator here is your "," 

for (String s : arrayListWords) { 
    System.out.print(separator + s); 
    separator = ","; 
} 

Jeśli arrayListWords ma dwóch słów, należy wydrukować A, B

6

Korzystanie Java 8 strumieni:

Stream.of(arrayListWords).collect(Collectors.joining(", ")); 
0

Oto, co wymyślę:

String join = ""; 

// solution 1 
List<String> strList = Arrays.asList(new String[] {"1", "2", "3"}); 
for(String s: strList) { 
    int idx = strList.indexOf(s); 
    join += (idx == strList.size()-1) ? s : s + ","; 
} 
System.out.println(join); 

// solution 2 
join = ""; 
for(String s: strList) {  
    join += s + ","; 
} 

join = join.substring(0, join.length()-1); 
System.out.println(join); 

// solution 3 
join = ""; 
int count = 0; 
for(String s: strList) {  
    join += (count == strlist.size()-1) ? s: s + ","; 
    count++; 
} 

System.out.println(join); 

Oczywiście możemy utalise StringBuilder ale ze wszystkich rozwiązań, podoba mi się odpowiedź @Mav, ponieważ jest bardziej wydajna i czysta.

0

Z Java 8 zrobiło się o wiele łatwiejsze, nie ma potrzeby 3 stron -

final List<String> words = Arrays.asList("one", "two", "three", "four"); 
String wordsAsString = words.stream().reduce((w1, w2) -> w1 + "," + w2).get(); 
System.out.println(wordsAsString); 
0
StringJoiner str = new StringJoiner(", "); 
str.add("Aplha").add("Beta").add("Gamma"); 

String result = str.toString(); 
System.out.println("The result is: " + result); 

Wyjście: Wynik: Aplha, Beta, Gamma

Powiązane problemy