Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我遇到的一个java字符串练习_Java_String - Fatal编程技术网

我遇到的一个java字符串练习

我遇到的一个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

在字符串中寻找类似“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);
   }
}
公共类{
公共静态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”))