2013-08-16 318 views
12

我正在打印出數組列表中的元素,我希望每個單詞之間除了最後一個單詞之外都有一個逗號。現在我在做這樣的:用數組之間的元素之間的逗號打印出除最後一個單詞之外的元素

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

當你瞭解它會打印出這樣的話:「一,二,三,四,」 而問題是最後一個逗號,我怎麼解決這個?所有答案讚賞!

最好的問候, 埃裏卡

+0

我敢確定你可以在你的'ArrayList'上調用'toString()',它會返回數組中每個元素的'toString()',用逗號分隔。如果你不喜歡'['和']',你可以把它們拿出來。像[這個](http://ideone.com/wBmvua) –

回答

20

打印上自己的第一個字,如果它的存在。然後先將模式打印爲逗號,然後再打印下一個元素。

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

隨着List,你最好使用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

容易理解,我去這個。謝謝! –

+0

@Erica你編輯你的帖子來說它是一個數組列表(或者我誤解了它)。你將不得不改變你如何迭代來適應'List' api。 –

+0

請注意,如果'arrayListWords'是一個'LinkedList'而不是'ArrayList',那麼當它應該是'O(n)'時,它就變成了'O(n^2)'解。 –

0

您可以使用在ListIterator,以檢查是否有更多的元素。

只有當前元素不是最後一個元素時,纔可以附加逗號。

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

但是它是非常容易使用第三方庫像Guava爲你做到這一點。然後,代碼變爲:

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

當我變得更有經驗時,我會看看番石榴,謝謝。 –

0

你可以試試這個

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

我不會依賴程序邏輯中'List'的'toString'值。這可能會從實現變爲實現,導致代碼中斷。 –

+0

這也將刪除單詞中的字符,如果任何單詞包含'['或']',這將改變單詞。 – Asaf

2

雖然迭代,你可以追加String sStringBuilder,並在結束時,你可以刪除最後2個字符這是一個額外的,和(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

感謝它的工作! – Roadies

1

你可以在java.util包中,並重新使用標準功能的空間在開始和結束時移動塊引號。

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

很高興認識先生,謝謝! –

+0

看起來不錯,但toString規範有多穩定? –

-1

只需使用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

你能解釋一下「你打印的方式」嗎?有沒有選項可以打印沒有括號? –

+0

用戶發佈它是一個數組列表。你可以在數組列表上使用toString()。 – Rohit

+0

使用這個: int length = s.length(); s = s.substring(1,length); System.out.println(s); – Rohit

11

我會寫這樣說:

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

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

如果arrayListWords有兩個詞,它應該打印出來 A,B

6

使用Java 8流:

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

下面是我想到的:

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

當然我們可以通過電話StringBuilder但所有的解決方案,我喜歡@Mav答案,因爲它更高效和乾淨。

0

與Java 8中要容易得多,不需要第三方 -

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

輸出: 結果:APLHA,β,γ

相關問題