如何对字符串进行替换,以便“(”变为“)”和“)”成为“(”?
答案 0 :(得分:8)
使用.replace()
会很诱人,但如果您将)
替换为(
,然后将(
替换为)
,那么您最终会得到)
所有String swapParens(String s) {
StringBuilder sb = new StringBuilder();
sb.ensureCapacity(s.length()); // preallocate to prevent resizing
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
switch(c) {
case ')': sb.append('('); break;
case '(': sb.append(')'); break;
default: sb.append(c);
}
}
return sb.toString();
}
。相反,迭代字符串并使用stringbuilder来构建字符串。
{{1}}
我知道你可以把一些东西放在那里作为占位符进行交换,但如果它已经存在于你的字符串中,你就会遇到大问题。
考虑使用&#34; xxx&#34;作为你的交换字符串。如果您的字符串是&#34; abcx(yz)&#34;,并且您替换(使用xxx,最终使用&#34; abcxxxyz)&#34;然后你替换)(所以你有&#34; abcxxxxyz(&#34;然后你用xxx代替),所以你有&#34; abc)xyz(&#34;。当然不酷!
答案 1 :(得分:3)
怎么样
text.replace("(", "xxx").replace(")", "(").replace("xxx",")")
其中xxx
肯定不会出现在你的字符串中。
答案 2 :(得分:1)
您可以先使用未使用的字符替换"("
,然后使用")"
替换"("
,然后使用")"
替换未使用的字符:
String swapParens(String s) {
return s.replace('(', '\0').replace(')', '(').replace('\0', ')');
}
如果你的字符串中已经有一个空字符,那将无效,所以这不是一个好的通用解决方案。
否则你可以使用glowcoder的方法,但更有效的方法是将字节放入数组并自己替换它们,然后重新构建字符串:
String swapParens(String s) {
char[] bytes = s.toCharArray():
for (int i=0; i < bytes.length; ++i) {
if (bytes[i]=='(') bytes[i] = ')';
else if (bytes[i]==')') bytes[i] = '(';
}
return new String(bytes);
}
答案 3 :(得分:1)
StringBuffer str = new StringBuffer(text);
for(int i=0; i<str.length(); i++){
if(str.charAt(i)=='(') srt.setCharAt(i,')');
else if(str.charAt(i)==')') str.setCharAt(i,'(');
}
text = str.toString();
答案 4 :(得分:0)
如果您在文本字符串中找不到任何字符,则可以使用.replace(')', 'unusedChar').replace('(', ')').replace('unusedChar', '(');