Почему Arrays.toString (values) .trim () создает [текст в квадратных скобках]? - PullRequest
3 голосов
/ 12 октября 2010
Map<String, String[]> map = request.getParameterMap();
for (Entry<String, String[]> entry : map.entrySet())
{
    String name = entry.getKey();
    String[] values = entry.getValue();
    String valuesStr = Arrays.toString(values).trim();
    LOGGER.warn(valuesStr);

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

Почему Arrays.toString(values).trim(); заключает в скобки значение параметра, поэтому оно выглядит следующим образом:

[Georgio]

Какой лучший способ получить строку без скобок?

Если я сделаю это:

String valuesStr = values[0].trim();

похоже, что существует риск потери последующих значений в массиве.

Ответы [ 5 ]

8 голосов
/ 12 октября 2010

Это просто форматирование по умолчанию, применяемое методом Arrays.toString(Object[]).Если вы хотите пропустить скобки, вы можете построить строку самостоятельно, например:

public static String toString(Object[] values)
{
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < values.length; i++)
    {
        if (i != 0)
            sb.append(", ");
        sb.append(values[i].toString());
    }
    return sb.toString();
}
5 голосов
/ 12 октября 2010

Если вы хотите получить список значений, разделенных запятыми (или что-то еще), Мне нравится подход с Столяром Гуавы :

String valuesStr = Joiner.on(",").join(values)

1 голос
/ 12 октября 2010

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

Arrays.toString(values).split("[\\[\\]]")[1];

Примечание: Используйте описанный выше метод только в том случае, если сами значения не содержат скобок.

Реализация StringBuilder:

 static String toString(Object ... strings)
 {
    if(strings.length==0)
        return "";
    StringBuilder sb=new StringBuilder();
    int last=strings.length-1;
    for(int i=0;i<last;i++)
        sb.append(strings[i]).append(",");
    sb.append(strings[last]);
    return sb.toString();
 }

UPDATE:

Использование подстроки:

String s=(s=Arrays.toString(arr)).substring(1,s.length()-1); 
1 голос
/ 12 октября 2010

Я считаю, что именно так работает реализация Arrays.toString(Object[]), по крайней мере на Sun JVM. Если бы в массиве было несколько элементов, вы бы увидели что-то вроде [foo, bar, baz].

Вы хотите получить тот же самый вывод без скобок? Например. foo, bar, baz? Если это так, то довольно легко написать собственный метод.

1 голос
/ 12 октября 2010

Реализация Java по умолчанию метода Arrayys toString такая же.Вы можете создать класс, расширяющий его, специализирующийся на том, что вы хотите, и перезаписать метод toString, чтобы он генерировал строку по вашему вкусу, без "[" "]" s, и с другими ограничениями по вашему вкусу и необходимости.

...