[英]Best way to replace repeated character in String
我得到了字符串"('allan', 'bob's', 'charles', 'dom')"
。 现在,我需要此字符串,但格式为"('allan', 'bob''s', 'charles', 'dom')"
。
注意,我已经用bob's
替换了bob's
,仅此bob''s
。 我最初的解决方法是
String str = "('allan', 'bob's', 'charles', 'dom')";
String[] elements = str.substring(1, str.length()-1).split(", ");
String res = "(";
for (int j = 0; j < elements.length; j++) {
res += "'"+ elements[j].substring(1, elements[j].length()-1).replace("'", "''") + "'" + ((j == elements.length - 1) ? ")" : ",' ");
}
res是最终解决方案。 但是我想知道是否有一个更短,更优雅的解决方案?
replaceAll将以"'s"
作为正则表达式。
public static void main(String[] args) {
String str = "('allan', 'bob's', 'charles', 'dom')";
str = str.replaceAll("'s", "''s");
System.out.println(str);
}
输出:
('allan', 'bob''s', 'charles', 'dom')
听起来您只是想用两个单引号替换两个字母之间的单引号。 使用正则表达式模式"(\\\\w)(['])(\\\\w)"
和替换字符串"$1''$3"
String.replaceAll()
应该为您完成此操作。
模式细分:
(\\\\w)
-将字母或数字捕获到组1中 (['])
-将单引号捕获到组2中 (\\\\w)
-将字母或数字捕获到第3组中 替换字符串明细:
$1
捕获组1 ''
-两个单引号 $3
捕获组3 代码示例:
public static void main(String[] args) throws Exception {
String str = "('allan', 'bob's', 'charles', 'dom')";
str = str.replaceAll("(\\w)(['])(\\w)", "$1''$3");
System.out.println(str);
}
结果:
('allan', 'bob''s', 'charles', 'dom')
str = str.replace("'", "''").replaceAll("''(.*)?''(, *|\\)$)", "'$1'$2");
(~~) (~~~|~~~~)
不能在子字符串替换上完成撇号加倍(无功能替换),因此必须首先完成。
然后,可以选择引用的值并进行更正。
预告片可以是逗号+空格或最后的右括号。
.*?
需要最短的顺序。
我建议修复输出该字符串的东西,并且:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.