Java: конвертировать список < String > в строку

Это должно распечатать все параметры, начинающиеся с «Вопрос».

<html><body>
<%@ page import = "java.util.*" %>
<b>Parameters:</b><br>
<%
  Enumeration parameterList = request.getParameterNames();
  while( parameterList.hasMoreElements() )
  {
    String sName = parameterList.nextElement().toString();
    if(sName.toLowerCase.startsWith("question")){
      String[] sMultiple = request.getParameterValues( sName );
      if( 1 >= sMultiple.length )
        // parameter has a single value. print it.
        out.println( sName + " = " + request.getParameter( sName ) + "<br>" );
      else
        for( int i=0; i<sMultiple.length; i++ )
          // if a paramater contains multiple values, print all of them
          out.println( sName + "[" + i + "] = " + sMultiple[i] + "<br>" );
    }
  }
%>
</body></html>
541
задан Ani Menon 6 July 2016 в 06:24
поделиться

9 ответов

EDIT

Я также заметил основную проблему реализации toString () , а также об элементе, содержащем разделитель, но Я думал, что я параноик.

Поскольку у меня есть два комментария по этому поводу, я изменяю свой ответ на:

static String join( List<String> list , String replacement  ) {
    StringBuilder b = new StringBuilder();
    for( String item: list ) { 
        b.append( replacement ).append( item );
    }
    return b.toString().substring( replacement.length() );
}

Что очень похоже на исходный вопрос.

Так что, если вам не хочется добавлять всю банку в ваш проект вы можете использовать это.

Я думаю, что с вашим исходным кодом все в порядке. Собственно, альтернатива тому, что все '

2
ответ дан 22 November 2019 в 22:13
поделиться

Вы можете использовать библиотеку общего пользования apache, которая имеет класс StringUtils и метод соединения.

Проверьте эту ссылку: https://commons.apache.org/proper/commons -lang / javadocs / api.2.0 / org / apache / commons / lang / StringUtils.html

Обратите внимание, что указанная выше ссылка может со временем устареть, и в этом случае вы можете просто поискать в Интернете «apache commons StringUtils», что должно позволить вам найти самую последнюю ссылку.

(ссылка на этот поток) Java-эквиваленты C # String.Format () и String.Join ()

9
ответ дан 22 November 2019 в 22:13
поделиться

All the references to Apache Commons are fine (and that is what most people use) but I think the Guava equivalent, Joiner, has a much nicer API.

You can do the simple join case with

Joiner.on(" and ").join(names)

but also easily deal with nulls:

Joiner.on(" and ").skipNulls().join(names);

or

Joiner.on(" and ").useForNull("[unknown]").join(names);

and (useful enough as far as I'm concerned to use it in preference to commons-lang), the ability to deal with Maps:

Map<String, Integer> ages = .....;
String foo = Joiner.on(", ").withKeyValueSeparator(" is ").join(ages);
// Outputs:
// Bill is 25, Joe is 30, Betty is 35

which is extremely useful for debugging etc.

301
ответ дан 22 November 2019 в 22:13
поделиться

Нет, такого удобного метода нет в стандартном API Java.

Неудивительно, что Apache Commons предоставляет такую ​​вещь в своем классе StringUtils на тот случай, если вы не хотите писать ее самостоятельно.

49
ответ дан 22 November 2019 в 22:13
поделиться

Не из коробки, но во многих библиотеках есть похожие:

Commons Lang:

org.apache.commons.lang.StringUtils.join(list, conjunction);

Spring:

org.springframework.util.StringUtils.collectionToDelimitedString(list, conjunction);
135
ответ дан 22 November 2019 в 22:13
поделиться

Вы можете сделать это:

String aToString = java.util.Arrays.toString(anArray);
// Do not need to do this if you are OK with '[' and ']'
aToString = aToString.substring(1, aToString.length() - 1);

Или однострочным (только если вы не хочу '[' и ']')

String aToString = java.util.Arrays.toString(anArray).substring(1).replaceAll("\\]$", "");

Надеюсь, это поможет.

7
ответ дан 22 November 2019 в 22:13
поделиться

Google Guava API также имеет .join (), хотя (что должно быть очевидно из других ответов), Apache Commons здесь в значительной степени является стандартом.

2
ответ дан 22 November 2019 в 22:13
поделиться

Вы можете попробовать метод соединения Apache Commons StringUtils:

http://commons.apache.org/lang/api/org/apache/commons/lang/StringUtils.html# join (java.util.Iterator , java.lang.String)

Я обнаружил, что Apache StringUtils подбирает слабину jdk; -)

4
ответ дан 22 November 2019 в 22:13
поделиться

Имеющийся у вас код - правильный способ сделать это, если вы хотите использовать JDK без каких-либо внешних библиотек. Не существует простого однострочника, который вы могли бы использовать в JDK.

Если вы можете использовать внешние библиотеки, я рекомендую вам изучить класс org.apache.commons.lang.StringUtils в библиотеке Apache Commons.

Пример использования:

List<String> list = Arrays.asList("Bill", "Bob", "Steve");
String joinedResult = StringUtils.join(list, " and ");
19
ответ дан 22 November 2019 в 22:13
поделиться
Другие вопросы по тегам:

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