首页 > 解决方案 > 删除 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","" );

但它会删除所有空格。你能帮我解决这个问题吗?

标签: javajson

解决方案


如果您不想解析 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)(?=\")查找单词(字母或数字)、空格、引用


推荐阅读