我正在打印出數組列表中的元素,我希望每個單詞之間除了最後一個單詞之外都有一個逗號。現在我在做這樣的:用數組之間的元素之間的逗號打印出除最後一個單詞之外的元素
for (String s : arrayListWords) {
System.out.print(s + ", ");
}
當你瞭解它會打印出這樣的話:「一,二,三,四,」 而問題是最後一個逗號,我怎麼解決這個?所有答案讚賞!
最好的問候, 埃裏卡
我正在打印出數組列表中的元素,我希望每個單詞之間除了最後一個單詞之外都有一個逗號。現在我在做這樣的:用數組之間的元素之間的逗號打印出除最後一個單詞之外的元素
for (String s : arrayListWords) {
System.out.print(s + ", ");
}
當你瞭解它會打印出這樣的話:「一,二,三,四,」 而問題是最後一個逗號,我怎麼解決這個?所有答案讚賞!
最好的問候, 埃裏卡
打印上自己的第一個字,如果它的存在。然後先將模式打印爲逗號,然後再打印下一個元素。
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());
}
容易理解,我去這個。謝謝! –
@Erica你編輯你的帖子來說它是一個數組列表(或者我誤解了它)。你將不得不改變你如何迭代來適應'List' api。 –
請注意,如果'arrayListWords'是一個'LinkedList'而不是'ArrayList',那麼當它應該是'O(n)'時,它就變成了'O(n^2)'解。 –
您可以使用在List
的Iterator
,以檢查是否有更多的元素。
只有當前元素不是最後一個元素時,纔可以附加逗號。
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));
}
當我變得更有經驗時,我會看看番石榴,謝謝。 –
你可以試試這個
List<String> listWords= Arrays.asList(arrayListWords); // convert array to List
StringBuilder sb=new StringBuilder();
sb.append(listWords);
System.out.println(sb.toString().replaceAll("\\[|\\]",""));
我不會依賴程序邏輯中'List'的'toString'值。這可能會從實現變爲實現,導致代碼中斷。 –
這也將刪除單詞中的字符,如果任何單詞包含'['或']',這將改變單詞。 – Asaf
雖然迭代,你可以追加String s
到StringBuilder
,並在結束時,你可以刪除最後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());
感謝它的工作! – Roadies
你可以在java.util包中,並重新使用標準功能的空間在開始和結束時移動塊引號。
String str = java.util.Arrays.toString(arrayListWords);
str = str.substring(1,str.length()-1);
System.out.println(str);
很高興認識先生,謝謝! –
看起來不錯,但toString規範有多穩定? –
只需使用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.
我會寫這樣說:
String separator = ""; // separator here is your ","
for (String s : arrayListWords) {
System.out.print(separator + s);
separator = ",";
}
如果arrayListWords有兩個詞,它應該打印出來 A,B
使用Java 8流:
Stream.of(arrayListWords).collect(Collectors.joining(", "));
下面是我想到的:
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
答案,因爲它更高效和乾淨。
與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);
StringJoiner str = new StringJoiner(", ");
str.add("Aplha").add("Beta").add("Gamma");
String result = str.toString();
System.out.println("The result is: " + result);
輸出: 結果:APLHA,β,γ
我敢確定你可以在你的'ArrayList'上調用'toString()',它會返回數組中每個元素的'toString()',用逗號分隔。如果你不喜歡'['和']',你可以把它們拿出來。像[這個](http://ideone.com/wBmvua) –