Распечатывать элементы из массива с запятой между элементами, кроме последнего слова

Я печатаю элементы из списка массивов, я хочу иметь запятую между каждым словом, кроме последнего слова. Сейчас я делаю так:

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

Как вы понимаете, это напечатает такие слова: "один, два, три, четыре", и проблема в последней запятой, как я могу это решить? Все ответы оценены!

С уважением, Erica

Ответ 1

Распечатайте первое слово самостоятельно, если оно существует. Затем сначала напечатайте шаблон как запятую, затем следующий элемент.

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

Ответ 2

Я бы написал это так:

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

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

Если arrayListWords имеет два слова, он должен распечатываться A, B

Ответ 3

Использование потоков Java 8:

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

Ответ 4

Во время итерации вы можете добавить 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());

Ответ 5

Вы можете использовать стандартную функцию в пакете java.util и удалить кавычки блока в начале и в конце.

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

Ответ 6

Вы можете использовать Iterator в List, чтобы проверить, есть ли больше элементов.

Затем вы можете добавить запятую только в том случае, если текущий элемент не является последним элементом.

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

Ответ 7

Вы можете попробовать это

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

Ответ 8

Вот что я придумал:

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 ответить как более эффективный и чистый.

Ответ 9

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

Ответ 10

StringJoiner str = new StringJoiner(", ");
str.add("Aplha").add("Beta").add("Gamma");

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

Выход: Результат: Aplha, Beta, Gamma

Ответ 11

Просто используйте метод 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.