为什么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);