java - 正则表达式删除某些字符不适用于使用 gson 从 pojo 获得的 json 字符串
问题描述
我正在使用 gson 将 pojo 转换为 json 字符串。在那个字符串上,我想删除某些字符,然后想转换回 pojo。我的目标是从 pojo 中删除这些字符。我希望这个函数是通用的,因为它将用于不同类型的 pojo。
我曾尝试使用 jackson 和 gson 将 pojo 转换为字符串,但它们都不起作用
public <T> T sanitise(T object, Class<T> class){
return gson.fromJson(gson.toJson(object).replaceAll("[\\s]", ""), class);
}
我得到这个:{"field1":"entry","field2":"\tentry\t","field3":"entry\tentry","field4":["\tentry\t","\tentry\tentry\t","entry"]}
输出来自gson.toJson(pojo, pojoClass)
。
我想要这个:
{"field1":"entry","field2":"entry","field3":"entryentry","field4":["entry","entryentry","entry"]}
。
pojo 是一些 pojoClass 的对象。
.replaceAll("[\\s]", "")
当我传递字符串"\t\r\ndummy"
但不使用的输出时工作gson.toJson()
解决方案
你说它在传递 Java 字符串文字时有效"\t\r\ndummy"
,但那是因为Java 编译器已将 、 和 转换为\t
、\r
和字符,从而产生 string 。\n
TAB
CR
LF
<TAB><CR><LF>dummy
"\\s"
您说在使用包含 的输入的正则表达式时它不起作用"field2":"\tentry\t"
,但那是因为\t
有两个字符\
和t
,而不是TAB
字符。
如果要消除text \t
,则需要 regex "\\\\t"
,它是 regex 的 Java 字符串文字\\t
,表示\
字符后跟t
字符。
使用replaceAll("\\\\t", "")
而不是replaceAll("[\\s]", "")
.
推荐阅读
- r - 如何置换给定矩阵的行
- javascript - 是否有类似 Chrome Devtools 的 CSS 属性编辑器小提琴/库?
- html - 如何更改 Ionic react 中 CSS 节点模块的内容?
- reactjs - 从 Material UI 对 TextField 元素进行反应测试
- python - 如何从字符串列表中删除引号和内括号
- nestjs - nestjsx/crud - 如何更改错误响应
- ansible - 在不同的组中重复使用 Ansible Vault 文件
- java - 如何在 JAVA 中默认选择 JTextField?
- amazon-cognito - 将资源服务器添加到 AWS Cognito 用户池会出现错误
- apache-kafka - Kafka-JMX 指标 | BytesInPerSec 的 PromQL 查询