Java字符串删除大写字符时报cannot find symbol错误求助
嘿,我来帮你搞定这个问题!
首先,你遇到的cannot find symbol - method delete(int,int)错误,核心原因很简单:Java里的String类是不可变的,它根本没有delete()方法。你想调用的修改字符串的方法,其实是属于StringBuilder或者StringBuffer的——这两个是专门用来处理可变字符串的类。
除了这个核心问题,你的代码还有几个小坑:
int l = s.length()后面少了分号,这会直接导致编译失败;- 就算你换成了可变字符串类,原有的循环逻辑也有问题:当你删除一个字符后,字符串的长度会变短,后面的字符会往前移位,这时候继续
i++就会跳过下一个字符;而且你写的delete(i,(i+2))是删除两个字符,但你只需要删除当前的大写字符,应该用delete(i, i+1)(因为这个方法是左闭右开的区间)。
修正后的代码(用StringBuilder)
String s = "Some Random Sentence Here"; StringBuilder sb = new StringBuilder(s); for (int i = 0; i < sb.length(); ) { // 这里不直接i++,避免索引错位 char ch = sb.charAt(i); if (Character.isUpperCase(ch)) { sb.delete(i, i + 1); // 删除当前位置的大写字符 } else { i++; // 只有没删除字符时,才移动索引 } } System.out.println(sb.toString());
更简洁的写法(正则表达式)
如果你不想写循环,用正则表达式一行就能搞定:
String s = "Some Random Sentence Here"; String result = s.replaceAll("[A-Z]", ""); System.out.println(result);
这个方法里,[A-Z]匹配所有大写英文字母,replaceAll()会把所有匹配到的内容替换成空字符串,直接得到去掉所有大写字符的结果,效率也很高。
内容的提问来源于stack exchange,提问作者Siddharth Bhat
相关产品推荐
相关产品推荐

