Java圆括号翻转字符串

时间:2011-04-17 21:28:56

标签: java string

如何对字符串进行替换,以便“(”变为“)”和“)”成为“(”?

5 个答案:

答案 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', '(');