格式化toString返回的值

时间:2014-05-05 13:51:20

标签: groovy

那种时髦的新手如此忍受我。我有一个包含一系列文本字段的表单。我也过滤了其中两个字段。这部分有效,但返回的值的格式不是我希望它格式化的方式。我应该使用toString或join或其他什么?我是一个时髦的新手,所以代码样本将非常感激

这是我的代码:

String message = request.requestParameterMap.findAll { key, value ->!(key in [“userKey", "topicKey"]) }.toString()

这是我的输出:

[fname:[joey], lname:[bats], phone:[999-999-9999], email:[test@gmail.com]]

理想情况下,我喜欢我的输出:

fname: joey
lname: bats
phone: 999-999-9999
email: test@gmail.com

3 个答案:

答案 0 :(得分:1)

String message = 
    request.requestParameterMap
           .findAll { key, value ->!(key in [“userKey", "topicKey"]) }
           .collect { k, v -> "$k: ${v[0]}\n" }
           .join()

应以预期格式提供消息

fname: joey
lname: bats
phone: 999-999-9999
email: test@gmail.com

答案 1 :(得分:0)

快速而肮脏的方法是使用一系列replaceAll(...)来格式化您想要的代码。

替换前导和尾随括号:

message = message.replaceAll("^[|]$", "");

用空格替换左括号:

message = message.replaceAll("\\[", " ");

并用换行符替换右括号逗号空格:

message = message.replaceAll("\\],\\s+", "\n");

很有可能,甚至可能存在一些工具来更快地格式化它,但是没有一个能让我想到。

根据你想要做的事情,你可能更喜欢split字符串来获取一个数组,但这实际上取决于你将要用它做什么。

答案 2 :(得分:0)

使用inject将地图缩减为字符串:

​def m = [​fname: 'joey', name: 'bats', phone: 999-999-9999, email: 'test@gmail.com']

m.inject("") { result, e ->
   result += "$e.key: $e.value\n"
   result
}

结果:

fname: joey
name: bats
phone: -9999
email: test@gmail.com