java模式从mapper生成的字符串中清除其他字符周围的引号
我需要将json映射器生成的字符串序列替换为fallow: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
:"{ -> :{
}"} -> }}
你会怎么看呢
更新:完整字符串示例
{"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替换)没有模式