我遇到的一个java字符串练习
在字符串中寻找类似“zip”和“zap”的模式——长度为3,以“z”开头,以“p”结尾。返回一个字符串,其中所有这些单词的中间字母都消失了,因此“zipXzap”产生“zpXzp” 下面是我从某人那里得到的一个解决方案:我遇到的一个java字符串练习,java,string,Java,String,在字符串中寻找类似“zip”和“zap”的模式——长度为3,以“z”开头,以“p”结尾。返回一个字符串,其中所有这些单词的中间字母都消失了,因此“zipXzap”产生“zpXzp” 下面是我从某人那里得到的一个解决方案: public class Rough { public static void main(String [] args){ StringBuffer mat = new StringBuffer("matziplzdpaztp"); fo
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);
}
}
公共类{
公共静态void main(字符串[]args){
StringBuffer mat=新的StringBuffer(“matziplzdpaztp”);
对于(int i=0;i
但是为什么for循环条件(i
if (mat.charAt(i) == 'z' & mat.charAt(i + 2) == 'p'){
// -----------------------------------^^^^^
如果i
被i
绑定,则i+2
将超出范围。mat.length()将给出长度14,如果您在末尾检查mat.charAt(i+2),它将给出java.lang.StringIndexOutOfBoundsException
,因为字符串从索引0开始计数,而不是从1开始计数。如果仍要使用mat.length(),则必须在If条件下用short-circuit和'&&'运算符替换AND'&'运算符。“2”表示“除第一个单词外的长度”,只需检查字符串变量中的所有位置,并将这些位置视为子字符串的第一个单词,因此只需忽略“不带第一个单词的子字符串长度”
在您的例子中,“z*p”的长度是3,您只需检查字符串中的所有位置,并将该位置视为z以检查某些内容,因此忽略“*p”“,长度为2。因为在每个循环中,您都会看到位置i、i+1和i+2。如果i==n,则i+1将超出范围。此外,如果你只剩下2个字符要看,它们肯定不是z*p的形式,因为它至少有3个字符。不是原来的问题,但是你知道
字符串。replace
方法可以帮你完成所有这些吗<代码>System.out.println(“matziplzdpaztp”.replaceAll(“z.p”,“zp”))代码>