为什么Arrays.toString(values).trim()会生成?

Map map = request.getParameterMap(); for (Entry 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(); 

似乎存在丢失数组中后续值的风险。

这只是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(); } 

如果您想要的输出是由逗号(或其他)分隔的值列表,我喜欢使用Guava的Joiner方法 :

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

Java的Arrays toString方法的默认实现就是这样。 你可以创建一个扩展它的类,专门用于你想要的东西,并覆盖toString方法,使它生成你喜欢的字符串,没有“[”“],以及你喜欢和需要的其他限制。

我相信这就是Arrays.toString(Object[])的实现,至少在Sun JVM上是如何工作的。 如果数组有多个元素,你会看到像[foo, bar, baz]

您是否希望基本上获得相同的输出,没有括号? 比如foo, bar, baz ? 如果是这样,那么编写自己的方法应该很容易。

我建议你使用字符串构建器或guava的木匠,但如果你想快速修复,你可以试试这个:

 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 

更新:

使用子字符串:

 String s=(s=Arrays.toString(arr)).substring(1,s.length()-1);