我获得了字符串"('allan', 'bob's', 'charles', 'dom')"
。现在我需要这个字符串,但格式为"('allan', 'bob''s', 'charles', 'dom')"
。
注意我已将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是最终解决方案。不过我想知道是否有一个更短,更优雅的解决方案呢?
答案 0 :(得分:1)
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')
答案 1 :(得分:0)
听起来你只想用两个单引号替换两个字母之间的单引号。 String.replaceAll()
使用正则表达式模式"(\\w)(['])(\\w)"
和替换字符串"$1''$3"
应该为您完成此任务。
模式分解:
(\\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')
答案 2 :(得分:0)
str = str.replace("'", "''").replaceAll("''(.*)?''(, *|\\)$)", "'$1'$2");
(~~) (~~~|~~~~)
在子串替换(没有函数替换)上不能加倍撇号,因此必须先完成。
然后人们可以挑出引用的值,然后纠正它们。
预告片是逗号+空格或最后的右括号。
.*?
采用最短的序列。
答案 3 :(得分:0)
我建议修复输出该字符串的东西,并且: