java模式从mapper生成的字符串中清除其他字符周围的引号

java模式从mapper生成的字符串中清除其他字符周围的引号,java,regex,pattern-matching,replaceall,Java,Regex,Pattern Matching,Replaceall,我需要将json映射器生成的字符串序列替换为fallow: :"{ -> :{ }"} -> }} 你会怎么看呢 更新:完整字符串示例 {"method":"createInvoice","params":"{"btcDue":null,"btcPaid":null, "btcPrice":null,"currency":"PLN","currentTime":null, "ex

我需要将json映射器生成的字符串序列替换为fallow:

:"{ -> :{   
}"} -> }} 
你会怎么看呢

更新:完整字符串示例

{"method":"createInvoice","params":"{"btcDue":null,"btcPaid":null,
                        "btcPrice":null,"currency":"PLN","currentTime":null,
                        "exceptionStatus":null,"expirationTime":null,
                        "guid":"99250130","id":null,"invoiceTime":null,
                        "paymentUrls":null,"price":1.23,"rate":null,
                        "status":null,"transactions":null,"url":null
}"} 
 public String replace(CharSequence target, CharSequence replacement) {
    String replacementStr = replacement.toString();
    String targetStr = target.toString();
    // Special case when target == "". 
    // .. cut 
    // This is the "regular" case.
    int lastMatch = 0;
    StringBuilder sb = null;
    for (;;) {
        int currentMatch = indexOf(this, targetStr, lastMatch);
        if (currentMatch == -1) {
            break;
        }
        if (sb == null) {
            sb = new StringBuilder(count);
        }
        sb.append(this, lastMatch, currentMatch);
        sb.append(replacementStr);
        lastMatch = currentMatch + targetStr.count;
    }

    if (sb != null) {
        sb.append(this, lastMatch, count);
        return sb.toString();
    } else {
        return this;
    }
 }

 public String replaceAll(String regex, String replacement) {
    return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
但假设我们将有更多实例需要替换,如2:)

澄清:android字符串方法

{"method":"createInvoice","params":"{"btcDue":null,"btcPaid":null,
                        "btcPrice":null,"currency":"PLN","currentTime":null,
                        "exceptionStatus":null,"expirationTime":null,
                        "guid":"99250130","id":null,"invoiceTime":null,
                        "paymentUrls":null,"price":1.23,"rate":null,
                        "status":null,"transactions":null,"url":null
}"} 
 public String replace(CharSequence target, CharSequence replacement) {
    String replacementStr = replacement.toString();
    String targetStr = target.toString();
    // Special case when target == "". 
    // .. cut 
    // This is the "regular" case.
    int lastMatch = 0;
    StringBuilder sb = null;
    for (;;) {
        int currentMatch = indexOf(this, targetStr, lastMatch);
        if (currentMatch == -1) {
            break;
        }
        if (sb == null) {
            sb = new StringBuilder(count);
        }
        sb.append(this, lastMatch, currentMatch);
        sb.append(replacementStr);
        lastMatch = currentMatch + targetStr.count;
    }

    if (sb != null) {
        sb.append(this, lastMatch, count);
        return sb.toString();
    } else {
        return this;
    }
 }

 public String replaceAll(String regex, String replacement) {
    return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}

您可以使用以下结构匹配由
+
{
}
+
}
包围的所有引号:

(?<=})"(?=})|(?<=:)"(?={)

(?按搜索

\"
然后将其替换为“”

原文

:"{   
}"}
:{
}}
结果

:"{   
}"}
:{
}}
JAVA代码

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "\\\"";
final String string = ":\"{ -> :{   \n"
     + "}\"} -> }} ";
final String subst = "";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

// The substituted value will be contained in the result variable
final String result = matcher.replaceAll(subst);

System.out.println("Substitution result: " + result);

没有什么困难:

String result = "{\"method\":\"createInvoice\",\"params\":\"{\"btcDue\":null,\"btcPaid\":null,\"btcPrice\":null,\"currency\":\"PLN\",\"currentTime\":null,\"exceptionStatus\":null,\"expirationTime\":null,\"guid\":\"99250130\",\"id\":null,\"invoiceTime\":null,\"paymentUrls\":null,\"price\":1.23,\"rate\":null,\"status\":null,\"transactions\":null,\"url\":null}\"}"
    .replace(":\"{", ":{")
    .replace("}\"}", "}}");
System.out.println(result);

一个简单的
.replace(“\”,”);
不起作用?@CaioOliveira-否,因为字符串包含双引号,我需要保留这个replace all”在我的字符串中-可能作为其art/android java正则表达式实现,我得到methodcreateInvoice、paramsbtcDuenull、btcPaidnull、btcPricenull、currencyPLN、currentTimenull、exRatesnull、exceptionStatusnull、expirationTimenull、guid99250130、idnull、invoiceTimenull、paymentUrlsnull、price1.23、ratenull、statusnull、TransactionNull、,urlnull@ceph3us真奇怪,哟u在正则表达式字符串中的
前面添加了一个反斜杠
,使其成为一个有效的字符串文本,对吗?编译模式模式。编译(“[()”我这样想,但如果我需要替换所有实例,我需要循环…Java很奇怪,
replaceAll(模式,替换)
使用regex替换所有实例,而
replace(pattern,replacement)
替换所有不使用regex的实例…如果您愿意,也可以使用
replaceAll
:src.replaceAll(\\:\“\\”,“:{”).replaceAll(\\”,“}”)
replaceAll是相等的->pattern.compile(regex).matcher(this.replaceAll(replacement);并且公共字符串替换(CharSequence目标,CharSequence替换)没有模式