Помощь в отладке кода конкатенации строк - PullRequest
2 голосов
/ 16 апреля 2010

У меня есть код для объединения строк. Однако по какой-то причине последняя строка не является комбинацией обязательных строк. Рассмотрим следующий код:

//cusEmail is of type String[]
String toList = "";
for(i=0; i < cusEmail.length - 1; i++) {
    toList.concat(cusEmail[i]);
    toList.concat("; ");
    System.out.println(cusEmail[i]);
}
toList.concat(cusEmail[i]);
System.out.println(toList);

Первый оператор sout правильно отображает строки в cusEmail [i]. Тем не менее, после объединения второй sout отображает пустой / пустой. Есть причина для этого? Правильно ли я его объединяю?

Ответы [ 2 ]

3 голосов
/ 16 апреля 2010

Строка неизменна . Это означает, что toList.concat(..) не меняется toList. Вместо этого он возвращает новую строку:

 toList = toList.concat(..);

Однако более целесообразно использовать StringBuilder.append(..):

StringBuilder toList = new StringBuilder();
for (...) {
    sb.append(emails[i]);
    sb.append("; ");
}
...
return sb.toString();

Еще лучший (с точки зрения повторного использования кода) способ - использовать утилиту для соединения строк с разделителями. Как ArrayUtils.join(emailsArray, "; "); (из общего достояния)

1 голос
/ 16 апреля 2010

String объекты неизменны. Вызов concat для toList не изменит значение объекта toList. Вместо этого concat вернет другой объект String, который является объединением двух строк. Например, вы захотите сохранить результат каждого из вызовов concat в переменной toList.

Например,

toList = toList.concat(cusEmail[i]);

Альтернативой использованию метода concat может быть использование оператора конкатенации. Это может быть немного лучше читать.

toList = toList + cusEmail[i];

Обратите внимание, однако, что каждый раз, когда одна строка соединяется с другой строкой, необходимо создать новый объект String, который содержит копии информации в двух исходных строках. Это может быть дорогостоящим способом построения строки, когда это делается снова и снова в цикле, например, что у вас есть. Это верно, используете ли вы метод concat или оператор конкатенации. Альтернативой является использование объекта StringBuilder для построения вашей строки.

StringBuilder toList = new StringBuilder();
for(i=0; i < cusEmail.length - 1; i++) {
    toList.append(cusEmail[i]);
    toList.append("; ");
    System.out.println(cusEmail[i]);
}
toList.append(cusEmail[i]);
System.out.println(toList.toString());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...