Переопределить метод toString () для удаления квадратных скобок? [] [дублировать]

[list1[i] + list2[i] for i in range(len(list1))]
0
задан Santhosh Kumar Tekuri 30 July 2015 в 08:47
поделиться

10 ответов

Вероятно, вы вызываете System.out.println для печати списка. JavaDoc говорит:

This method calls at first String.valueOf(x) to get the printed object's string value

Скобки добавлены в реализацию toString ArrayList. Чтобы удалить их, вы должны сначала получить строку:

String errorDisplay = errors.toString();

, а затем разделите скобки, что-то вроде этого:

errorDisplay = errorDisplay.substring(1, errorDisplay.length() - 1);

Неправильная практика зависит от реализация toString(). toString() предназначен только для создания читаемого человеком представления для ведения журналов или отладки. Поэтому лучше построить строку самостоятельно во время итерации:

List<Integer> errors = new ArrayList<>();
StringBuilder sb = new StringBuilder();
for (int x = 1; x<10; x++) { 
    errors.add(x);
    sb.append(x).append(",");
}
sb.setLength(sb.length() - 1);
String errorDisplay = sb.toString();

Обратите внимание, что это не массив, а только строка, отображающая содержимое списка. Чтобы создать массив из списка, вы можете использовать list.toArray () :

// create a new array with the same size as the list
Integer[] errorsArray = new Integer[errors.size()];
// fill the array
errors.toArray(errorsArray );
6
ответ дан Adriaan Koster 31 August 2018 в 20:15
поделиться

Короткий ответ: System.out.println(errors.toString().substring(1, errors.toString().length() - 1))

Объяснение: когда вы вызываете System.out.println(obj) с Object в качестве параметра, напечатанный текст будет результатом obj.toString(). ArrayList.toString() реализуется таким образом, чтобы он представлял его содержимое между скобками [] в разделенной запятой конкатенации каждого из содержащихся элементов (их .toString() представление также).

Это не хорошая практика полагаться на реализацию другого класса toString(). Вы должны использовать свой собственный способ форматирования вашего результата.

3
ответ дан dotvav 31 August 2018 в 20:15
поделиться

Скобки, которые вы видите, являются просто автоматическим способом отображения списка в JAVA (например, при использовании System.out.println(list);.

Если вы не хотите, чтобы они отображались при его показе, вы можете создать custom method:

public void showList(List<Integer> listInt)
{
    for(int el : listInt)
    {
        System.out.print(el + ", ");
    }
}

Затем настройте этот код, чтобы показать это по своему вкусу!

2
ответ дан faflo10 31 August 2018 в 20:15
поделиться
1
ответ дан Igor Iris 31 August 2018 в 20:15
поделиться

Скобки на самом деле не входят в список, это просто представление списка. Если какой-либо объект переходит в вывод String, вызываются объекты toString (). В случае ArrayList этот метод доставляет содержимое списка, заключенного в эти скобки.

Если вы хотите напечатать свой ArrayList без скобок, просто перебирайте его и печатайте.

2
ответ дан Jan 31 August 2018 в 20:15
поделиться

Если вы печатаете свой список ошибок, он будет внутренне вызывать метод toString() вашего списка, и этот метод добавит скобки. Есть несколько возможностей. Вы можете получить String с помощью метода toString(), чтобы удалить скобки из String. Или вы пишете свой собственный метод для печати списка.

public static <T> void printList(List<T> list)
{
    StringBuilder output = new StringBuilder();
    for(T element : list)
        output.append(element + ", ");
    System.out.println(output);
}
2
ответ дан kai 31 August 2018 в 20:15
поделиться

Это ArrayList из Integer. Этот ArrayList не может содержать символ типа '['. Но вы можете удалить из него Integer так:

error.remove(3);
1
ответ дан nhb.sajol 31 August 2018 в 20:15
поделиться
String text = errors.toString().replace("[", "").replace("]", "");//remove brackets([) convert it to string
1
ответ дан Satya 31 August 2018 в 20:15
поделиться

В вашем списке нет скобок. Это как раз то, как Java печатает список по умолчанию.

Если вы хотите распечатать содержимое своего списка, вы можете что-то вроде этого

for (Integer error : errors) {
    System.out.format("%d ", error);
}
2
ответ дан thomas.g 31 August 2018 в 20:15
поделиться

System.out.println(error.toString().substring(1, error.toString().length()-1)); Это сработало для меня

1
ответ дан vefthym 31 August 2018 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: