我怎样才能做一个字符串替换,这样“(”变成“)”和“)”变为“(”?Java的括号翻转的字符串
回答
这将是很有诱惑力的使用.replace()
,但如果你更换)
与(
,然后用)
(
会与所有)
结束。相反,遍历字符串,并使用StringBuilder来构建你的字符串。
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();
}
我知道你可以把东西在那里,一个占位符交换,但如果它已经存在于你的字符串中, d有一个大问题。
考虑使用“xxx”作为交换字符串。如果你的字符串是“abcx(yz)”,并且你替换(用xxx,你最终得到“abcxxxyz)”然后你替换成)(所以你有“abcxxxxyz(”。然后你用xxx替换),所以你有“ ABC)XYZ(”当然不是很酷!
如何
text.replace("(", "xxx").replace(")", "(").replace("xxx",")")
其中xxx
是肯定不会在字符串中出现的东西。
如何保证一个特定的子串永远不会发生? – corsiKa 2011-04-17 21:33:47
那么,我们可以保证,在特定类型的文本中出现特定的长子串的预期时间是宇宙死亡后的某个时间。 – 2011-04-17 21:45:21
你可以先用一个未使用的字符替换"("
,然后")"
与"("
,然后与")"
的未使用的字符:
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);
}
如果有一个字符你永远不会在字符串中找到,你可以使用.replace(')', 'unusedChar').replace('(', ')').replace('unusedChar', '(');
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();
- 1. 动态转义字符串中的%符号和括号{}
- 2. 转义C字符串花括号
- 3. Java字符串匹配括号
- 4. 翻转数字的符号的功能
- 5. 如何获取字符串中的括号内的字(java)
- 6. 字符串转换为字符数组,包括标点符号
- 7. 分割字符串括号
- 8. 字符串匹配不包括括号
- 9. 如何替换Java中的双括号内的子字符串?
- 10. 基于开放大括号的Java中的拆分字符串
- 11. 的Groovy/Java的劈在括号字符串 “(”
- 12. 双引号括起来的字符串
- 13. 解析字符串中的括号
- 14. 圆括号中的Javascript字符串
- 15. JavaScript匹配字符串内的括号
- 16. 用花括号C#的String.Format字符串
- 17. 删除括号内的字符串[iOS]
- 18. 括号内括号内的独立字符串
- 19. Java字符串使用不带转义字符的引号
- 20. 如何获得“括号内”字符串中的字符串?
- 21. C#字符串插值转义双引号和花括号
- 22. 如何将带括号的Ruby字符串转换为数组?
- 23. JavaScript将字符串转换为int括号中的数组
- 24. Java:解析字符串来查找括号的内容
- 25. 从Java中的字符串中删除方括号
- 26. 如何去除Java字符串中的大括号?
- 27. 名字在字符串中翻转
- 28. R:提取括号内的字符串/数字以及方括号内的字符串序列
- 29. 如何去除Java字符串中的空白/单字符圆括号
- 30. 查找字符串中的符号Java
这当然是最正确的方法。实际上,它可能是最有效的方式,因为字符串只被复制一次。 – 2011-04-17 21:42:05
我喜欢你的例子,显示原始字符串中不包含'xxx'可能会导致麻烦。 – 2011-04-17 21:43:24
我只是建议增加容量到StringBulder ctor以避免重新分配:StringBuilder(s.length())(更新:被添加) – 2011-04-17 21:47:43