Java друкує цілий масив із знаком ","?

System.out.print("Please select a game: ");
for (String s : gamesArray) {       
    System.out.print(s + ", "); 
}

Вихід:

Please select a game: spin, tof, Press any key to exit...

Вихід, який я виключаю:

Please select a game: spin, tof
Press any key to exit...

Why is it adding another ',' after the last array item? How do I prevent it?

4
Оскільки зараз закодовані, ви друкуєте , після кожного елемента, включаючи останній елемент
додано Автор Steve Kuo, джерело
Оскільки зараз закодовані, ви друкуєте , після кожного елемента, включаючи останній елемент
додано Автор Steve Kuo, джерело
Оскільки зараз закодовані, ви друкуєте , після кожного елемента, включаючи останній елемент
додано Автор Steve Kuo, джерело
Він додає ще один "," після останнього елемента масиву, тому що ви наказали йому додати один після кожного елемента масиву.
додано Автор Louis Wasserman, джерело
Він додає ще один "," після останнього елемента масиву, тому що ви наказали йому додати один після кожного елемента масиву.
додано Автор Louis Wasserman, джерело
Він додає ще один "," після останнього елемента масиву, тому що ви наказали йому додати один після кожного елемента масиву.
додано Автор Louis Wasserman, джерело
Ви запобігаєте цьому, написавши свій код, щоб остання кома не була надрукована. Кілька різних способів зробити це, але жоден з них не є автоматичним - ви повинні подумати про це і написати код.
додано Автор Hot Licks, джерело
Ви запобігаєте цьому, написавши свій код, щоб остання кома не була надрукована. Кілька різних способів зробити це, але жоден з них не є автоматичним - ви повинні подумати про це і написати код.
додано Автор Hot Licks, джерело
Ви запобігаєте цьому, написавши свій код, щоб остання кома не була надрукована. Кілька різних способів зробити це, але жоден з них не є автоматичним - ви повинні подумати про це і написати код.
додано Автор Hot Licks, джерело
Функція має хороші рішення для цього завдання.
додано Автор Squeezy, джерело
Функція має хороші рішення для цього завдання.
додано Автор Squeezy, джерело
Функція має хороші рішення для цього завдання.
додано Автор Squeezy, джерело

12 Відповіді

Чому б не просто викликати масиви # toString (масив) :

System.out.print("Please select a game: %s%n", 
                  Arrays.toString(gamesArray).replaceAll("(^\\[)|(\\]$)", ""));

АБО, щоб уникнути регулярного виразу:

String tmp = Arrays.toString(gamesArray);
System.out.print("Please select a game: %s%n", tmp.substring(1, tmp.length()-1));
8
додано
@arshajii: Дякуємо за ваші коментарі. Я зробив це replaceAll ("(^() ((\ _ $)", "") , щоб замінити тільки початкову і кінцеву квадратну дужку.
додано Автор anubhava, джерело
@arshajii: На жаль, я вже потрапив до ліміту репутації на сьогодні :( У будь-якому випадку так можна використовувати підрядок, але тоді він просто не може бути виконаний в одному дзвінку, оскільки нам потрібно зробити str.substring (1, substring.length() - 1);
додано Автор anubhava, джерело
Я радий, що ви внесли зміни (+1). Але чому б не просто використати substring ? Регулярні вирази зайві, коли все, що ми хочемо зробити, це позбавити перший і останній символи.
додано Автор arshajii, джерело
Тому що це друкуватиме: Будь ласка, виберіть гру: [spin, tof], а не без фігурних дужок.
додано Автор ardent, джерело
// iterate throght array
for ( int i = 0; i < gamesArray.length; i++ ) {

   //get the element
    String s = gamesArray[i];

   //print it
    System.out.print( s );

   //test if the current element is not the last (array size minus 1)
    if ( i != gamesArray.length - 1 ) {

       //if it is not the last element, print a comma and a space.
        System.out.print( ", " );
    }
}
7
додано
Мало зайвих коментарів, але краще.
додано Автор William Morrison, джерело
@WilliamMorrison;)
додано Автор davidbuzatto, джерело
Чому ви мінливу i isdede масив? [i]? Вибачте за запитання для початківців, це просто мене бентежить.
додано Автор Jony Kale, джерело
// iterate throght array
for ( int i = 0; i < gamesArray.length; i++ ) {

   //get the element
    String s = gamesArray[i];

   //print it
    System.out.print( s );

   //test if the current element is not the last (array size minus 1)
    if ( i != gamesArray.length - 1 ) {

       //if it is not the last element, print a comma and a space.
        System.out.print( ", " );
    }
}
7
додано
Мало зайвих коментарів, але краще.
додано Автор William Morrison, джерело
@WilliamMorrison;)
додано Автор davidbuzatto, джерело
Чому ви мінливу i isdede масив? [i]? Вибачте за запитання для початківців, це просто мене бентежить.
додано Автор Jony Kale, джерело
// iterate throght array
for ( int i = 0; i < gamesArray.length; i++ ) {

   //get the element
    String s = gamesArray[i];

   //print it
    System.out.print( s );

   //test if the current element is not the last (array size minus 1)
    if ( i != gamesArray.length - 1 ) {

       //if it is not the last element, print a comma and a space.
        System.out.print( ", " );
    }
}
7
додано
Мало зайвих коментарів, але краще.
додано Автор William Morrison, джерело
@WilliamMorrison;)
додано Автор davidbuzatto, джерело
Чому ви мінливу i isdede масив? [i]? Вибачте за запитання для початківців, це просто мене бентежить.
додано Автор Jony Kale, джерело

Чому після додавання останнього елемента масиву додається інший ','?

Оскільки в останньому елементі немає нічого особливого, ви додаєте , в кінці елемента кожен .

Як запобігти цьому?

Можна спробувати скористатися звичайним для -озброєнням і лише додати , , якщо індекс не є останнім індексом масиву. Еквівалентно, ви можете додати , до кожного елемента, виключаючи перше, і ви будете мати той же ефект.

int len = gamesArray.length;

if (len > 0)
    System.out.println(gamesArray[0]);

for (int i = 1; i < len; i++)
    System.out.print(", " + gamesArray[i]);
2
додано
@JonyKale Доступ до елемента i з масиву.
додано Автор arshajii, джерело
Що робить i всередині []?
додано Автор Jony Kale, джерело

Чому після додавання останнього елемента масиву додається інший ','?

Оскільки в останньому елементі немає нічого особливого, ви додаєте , в кінці елемента кожен .

Як запобігти цьому?

Можна спробувати скористатися звичайним для -озброєнням і лише додати , , якщо індекс не є останнім індексом масиву. Еквівалентно, ви можете додати , до кожного елемента, виключаючи перше, і ви будете мати той же ефект.

int len = gamesArray.length;

if (len > 0)
    System.out.println(gamesArray[0]);

for (int i = 1; i < len; i++)
    System.out.print(", " + gamesArray[i]);
2
додано
@JonyKale Доступ до елемента i з масиву.
додано Автор arshajii, джерело
Що робить i всередині []?
додано Автор Jony Kale, джерело

Чи можна використовувати бібліотеку Гуава ? Якщо так, це один рядок коду:

String result = Joiner.on(", ").join(gamesArray);
System.out.println(result);
2
додано
Apache Commons має подібне з'єднання
додано Автор Steve Kuo, джерело
А Java8 теж отримує.
додано Автор Sebastian Redl, джерело

Чи можна використовувати бібліотеку Гуава ? Якщо так, це один рядок коду:

String result = Joiner.on(", ").join(gamesArray);
System.out.println(result);
2
додано
Apache Commons має подібне з'єднання
додано Автор Steve Kuo, джерело
А Java8 теж отримує.
додано Автор Sebastian Redl, джерело

Another way to handle this (especially good if you know the array will never be empty) is to write the first element before the loop, then have the loop write , .

1
додано

Остання кома існує, тому що після кожного елемента друкується кома.

Ви можете виправити це, переписавши цикл for, так:

for(int i=0;i
1
додано

Ви повинні перевірити, чи є більше елементів у вашому масиві перед друком ",", щоб уникнути появи одного після останнього імені.

final Iterator iterator = Arrays.asList(gamesArray).iterator();
while(iterator.hasNext()) {
    System.out.print(iterator.next());
    if(iterator.hasNext()) {
        System.out.print(", ");
    }
}
System.out.println();
0
додано

Ви повинні перевірити, чи є більше елементів у вашому масиві перед друком ",", щоб уникнути появи одного після останнього імені.

final Iterator iterator = Arrays.asList(gamesArray).iterator();
while(iterator.hasNext()) {
    System.out.print(iterator.next());
    if(iterator.hasNext()) {
        System.out.print(", ");
    }
}
System.out.println();
0
додано
ІТ КПІ - Java
ІТ КПІ - Java
436 учасників