java - 删除 json vaule 中的空格
问题描述
我有一个存储 web 服务响应的字符串,如下所示。在这个字符串中,我想删除双引号旁边的空格(开头和结尾)使用 java.util.
String WebserviceResponse;
{
"assessmentID": 289,
"assesmentName": " OneCert ",
"accountName": " spadmin ",
"assetName": " OneCert ",
"applicationName": " OneCert ",
"accountType": " LocalAccount ",
"environment": " Test "
},
{
"assessmentID": 289,
"assesmentName": "OneCert ",
"accountName": "9000032",
"assetName": "OneCert",
"applicationName": "OneCert ",
"accountType": "zone2.scbdev.net",
"environment": "Test"
}
我尝试使用以下代码删除双引号旁边的空格 String FormattedResponse= WebserviceResponse.replaceAll( "\s","" );
但它会删除所有空格。你能帮我解决这个问题吗?
解决方案
如果您不想解析 JSON,可以使用此正则表达式:(?>\\S)(\\s)(?>\")
[在下面更新]并将匹配项替换为""
(空字符串)。
打破这个:
(?>\\S)
非捕获组,寻找任何不是空白的东西
(\\s)
寻找空白的捕获组
(?>\")
一个非捕获组,正在寻找"
(引用)
您将有空格匹配。然后就是replaceAll()
(""
空字符串)。
此处的结果:Regex101
更新
我做了一些测试,但在非捕获组和 java 方面遇到了一些问题。使用前瞻/后视可能会更好。我正在更新答案并在此处发布示例。
这是正则表达式的前瞻/后瞻版本:(?<=\")(\\s)(?=\\w)|(?<=\\w)(\\s)(?=\")
。正则表达式101
Java 中的示例
" \" assesmentName\": \" OneCert \"".replaceAll("(?<=\")(\\s)(?=\\w)|(?<=\\w)(\\s)(?=\")", "")
导致:
"assesmentName": "OneCert"
分手
(?<=\")(\\s)(?=\\w)
查找引用、空格、单词(字母或数字);或者
(?<=\\w)(\\s)(?=\")
查找单词(字母或数字)、空格、引用
推荐阅读
- laravel - 如何在 Laravel 中显示 2 个表中的数据?
- r - 使用 officedown::rdocx_document 时,Rmd 报告不会从参考文档的标题中导入图像:
- c# - Xamarin/C# - 在日期范围内查找周末的方法。为什么我陷入循环并且无法增加当前日期?
- amazon-s3 - 使用 Regex 将日志从 S3 导入 Athena
- swift - 如何在视图中使用 ForEach 将 Swift 5 数组索引偏移到某个数字?
- c# - Asp.Net 网站上的随机 ThreadAbortException
- sql - 我得到一个大写的表名调用一个变量
- node.js - 使用 mongodb lookyp 和 nodejs 获取计数值
- azure - SonarQube Azure AD SAML 身份验证
- ios - 核心数据崩溃“外部数据引用找不到基础文件。”