在字符串中查找“zip”和“zap”等模式 - 长度为3,以“z”开头,以“p”结尾。返回一个字符串,对于所有这些单词,中间字母不见了,所以“zipXzap”产生“zpXzp”
这是我从某人那里得到的解决方案:
public class Rough {
public static void main(String [] args){
StringBuffer mat = new StringBuffer("matziplzdpaztp");
for(int i = 0; i < mat.length() - 2; ++i){
if (mat.charAt(i) == 'z' & mat.charAt(i + 2) == 'p'){
mat.deleteCharAt(i + 1);
}
}
System.out.println(mat);
}
}
但为什么for循环条件(i&lt; mat.length() - 2)不是(i&lt; mat.length())????
答案 0 :(得分:2)
因为 in 循环:
if (mat.charAt(i) == 'z' & mat.charAt(i + 2) == 'p'){
// -----------------------------------^^^^^
如果i
被i < mat.length()
约束,则i + 2
将超出范围。
答案 1 :(得分:0)
因为你的单词长度至少为三个字母,所以你不必到达句子的末尾。
答案 2 :(得分:0)
mat.length()将给出长度14,如果你在结尾处检查mat.charAt(i + 2),它将给出java.lang.StringIndexOutOfBoundsException
,因为字符串从索引0开始计数而不是从1开始。如果你还是想要使用mat.length()你必须替换AND'&amp;'操作员短路AND'&amp;&amp;'操作符在if条件下。
答案 3 :(得分:0)
&#34; 2&#34;代表&#34;除第一个单词&#34;之外的长度,你只需要检查字符串变量中的所有位置,并将位置视为子字符串的第一个单词,所以只需忽略&# 34;没有第一个单词&#34; 的子字符串的长度。
在你的情况下,&#34; z * p&#34;是3,你只需检查字符串中的所有位置,并将位置视为z以检查某些内容,所以只需忽略&#34; * p&#34; ,长度为2。