Java StringBuilder方法deleteCharAt不删除字符

Java StringBuilder方法deleteCharAt不删除字符,java,string,stringbuilder,substring,arrayofstring,Java,String,Stringbuilder,Substring,Arrayofstring,我试图使用deleteCharAt(0)方法删除位置0处的字符,并将该字符(已复制)附加到末尾。字符将追加到结尾,但方法deleteCharAt(0)未执行。我真的不知道为什么它不起作用 Input: Test test test Expected output: esttqw esttqw esttqw Actual output: ttqw testtqw testtqw 下面是我的代码。非常感谢 pT = pT.toLowerCase(); /

我试图使用deleteCharAt(0)方法删除位置0处的字符,并将该字符(已复制)附加到末尾。字符将追加到结尾,但方法deleteCharAt(0)未执行。我真的不知道为什么它不起作用

    Input:  Test test test 
    Expected output:  esttqw esttqw esttqw 
    Actual output:  ttqw testtqw testtqw 
下面是我的代码。非常感谢

    pT = pT.toLowerCase(); //converts the string to lower case

    String[] strArr = pT.split(" "); //splits the string into an array


    for(String subStr : strArr){ //for each substring in the string array

        char first = subStr.charAt(0);
        stringBuilder.append(subStr); //converts the string to a stringbuilder object

        if((first=='a') || (first == 'e') || (first == 'i') || (first == 'o') || (first == 'u')){ //starts with a vowel
            stringBuilder.append((char)charRand1); //appends y1 to the end of the string
            stringBuilder.append((char)alphaRand3); //appends x3 to the end of the string
            stringBuilder.append((char)alphaRand4); //appends x4 to the end of the string
            stringBuilder.append(" ");
            encryptedSS = stringBuilder.toString(); //converts stringbuilder back to string
        }
        else{ //starts with a consonant
            stringBuilder.deleteCharAt(0); //deletes the first character
            stringBuilder.append(first); //appends the first character to the end of the word
            stringBuilder.append((char)alphaRand1); //append x1 to the end of the word
            stringBuilder.append((char)alphaRand2); //append x2 to the end of the word*/
            stringBuilder.append(" ");

            encryptedSS = stringBuilder.toString(); //converts string builder back to an array
        }

    }

您的代码片段没有显示您在哪里初始化
stringBuilder
,但似乎您只在循环之外执行了一次。因此,调用
deleteCharAt(0)
只会删除整个结果的第一个字符,而不是当前正在处理的字符串。为了避免这种情况,您可以为处理的每个字符串创建一个临时的
StringBuilder

for(String subStr : strArr) {
    // New StringBuilder per String
    StringBuilder stringBuilder = new StringBuilder(subStr);

    char first = subStr.charAt(0);

    if ((first=='a') || (first == 'e') || (first == 'i') || (first == 'o') || (first == 'u')){ //starts with a vowel
        stringBuilder.append((char)charRand1); //appends y1 to the end of the string
        stringBuilder.append((char)alphaRand3); //appends x3 to the end of the string
        stringBuilder.append((char)alphaRand4); //appends x4 to the end of the string
        stringBuilder.append(" ");
        encryptedSS = stringBuilder.toString(); //converts stringbuilder back to string
    }
    else{ //starts with a consonant
        stringBuilder.deleteCharAt(0); //deletes the first character
        stringBuilder.append(first); //appends the first character to the end of the word
        stringBuilder.append((char)alphaRand1); //append x1 to the end of the word
        stringBuilder.append((char)alphaRand2); //append x2 to the end of the word*/
        stringBuilder.append(" ");

        encryptedSS = stringBuilder.toString(); //converts string builder back to an array
    }

您的代码片段没有显示您在哪里初始化
stringBuilder
,但似乎您只在循环之外执行了一次。因此,调用
deleteCharAt(0)
只会删除整个结果的第一个字符,而不是当前正在处理的字符串。为了避免这种情况,您可以为处理的每个字符串创建一个临时的
StringBuilder

for(String subStr : strArr) {
    // New StringBuilder per String
    StringBuilder stringBuilder = new StringBuilder(subStr);

    char first = subStr.charAt(0);

    if ((first=='a') || (first == 'e') || (first == 'i') || (first == 'o') || (first == 'u')){ //starts with a vowel
        stringBuilder.append((char)charRand1); //appends y1 to the end of the string
        stringBuilder.append((char)alphaRand3); //appends x3 to the end of the string
        stringBuilder.append((char)alphaRand4); //appends x4 to the end of the string
        stringBuilder.append(" ");
        encryptedSS = stringBuilder.toString(); //converts stringbuilder back to string
    }
    else{ //starts with a consonant
        stringBuilder.deleteCharAt(0); //deletes the first character
        stringBuilder.append(first); //appends the first character to the end of the word
        stringBuilder.append((char)alphaRand1); //append x1 to the end of the word
        stringBuilder.append((char)alphaRand2); //append x2 to the end of the word*/
        stringBuilder.append(" ");

        encryptedSS = stringBuilder.toString(); //converts string builder back to an array
    }

我需要添加另一个StringBuilder对象来组装所有的子字符串

    pT = pT.toLowerCase(); //converts the string to lower case

    String[] strArr = pT.split(" "); //splits the string into an array


    for(String subStr : strArr){ //for each substring in the string array
        char first = subStr.charAt(0);

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(subStr);

        if((first=='a') || (first == 'e') || (first == 'i') || (first == 'o') || (first == 'u')){ //starts with a vowel
            stringBuilder.append((char)charRand1); //appends y1 to the end of the string
            stringBuilder.append((char)alphaRand3); //appends x3 to the end of the string
            stringBuilder.append((char)alphaRand4); //appends x4 to the end of the string
            stringBuilder.append(" ");
            encryptedSS = stringBuilder.toString(); //converts stringbuilder back to string
        }
        else{ //starts with a consonant
            stringBuilder.deleteCharAt(0); //deletes the first character
            stringBuilder.append(first); //appends the first character to the end of the word
            stringBuilder.append((char)alphaRand1); //append x1 to the end of the word
            stringBuilder.append((char)alphaRand2); //append x2 to the end of the word*/
            stringBuilder.append(" ");

            encryptedSS = stringBuilder.toString(); //converts string builder back to an array
        }

        builder2.append(encryptedSS); //appends the encrypted substring to the stringbuilder
    }

我需要添加另一个StringBuilder对象来组装所有的子字符串

    pT = pT.toLowerCase(); //converts the string to lower case

    String[] strArr = pT.split(" "); //splits the string into an array


    for(String subStr : strArr){ //for each substring in the string array
        char first = subStr.charAt(0);

        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append(subStr);

        if((first=='a') || (first == 'e') || (first == 'i') || (first == 'o') || (first == 'u')){ //starts with a vowel
            stringBuilder.append((char)charRand1); //appends y1 to the end of the string
            stringBuilder.append((char)alphaRand3); //appends x3 to the end of the string
            stringBuilder.append((char)alphaRand4); //appends x4 to the end of the string
            stringBuilder.append(" ");
            encryptedSS = stringBuilder.toString(); //converts stringbuilder back to string
        }
        else{ //starts with a consonant
            stringBuilder.deleteCharAt(0); //deletes the first character
            stringBuilder.append(first); //appends the first character to the end of the word
            stringBuilder.append((char)alphaRand1); //append x1 to the end of the word
            stringBuilder.append((char)alphaRand2); //append x2 to the end of the word*/
            stringBuilder.append(" ");

            encryptedSS = stringBuilder.toString(); //converts string builder back to an array
        }

        builder2.append(encryptedSS); //appends the encrypted substring to the stringbuilder
    }

你能给出一个输入示例,你期望得到的输出和你得到的实际输出吗?我刚刚添加了一些。谢谢你的帮助。你能给出一个输入示例,你期望得到的输出以及你得到的实际输出吗?我刚刚添加了一些。谢谢你的帮助。我尝试过了,但现在似乎我的整个字符串都被删除了,剩下的是:我尝试过了,但似乎现在我的整个字符串都被删除了,剩下的只是“esttqw”(这是正确的,但只需要字符串的其余部分),而不是“esttqw esttqw esttqw”。再次感谢。@Bastard24您需要以某种方式将
encryptedSS
实例累积到完整的字符串中。不清楚您在原始问题中发布的代码中是如何做到这一点的,但是如果您出于某种原因没有这样做,您应该这样做。我添加了另一个StringBuilder对象来累积encryptedSS实例。非常感谢你的帮助!我试过了,但现在似乎我的整个字符串都被删除了,剩下的是:我试过了,但似乎现在我的整个字符串都被删除了,剩下的只是“esttqw”(这是正确的,但只需要字符串的其余部分),而不是“esttqw esttqw esttqw”。再次感谢。@Bastard24您需要以某种方式将
encryptedSS
实例累积到完整的字符串中。不清楚您在原始问题中发布的代码中是如何做到这一点的,但是如果您出于某种原因没有这样做,您应该这样做。我添加了另一个StringBuilder对象来累积encryptedSS实例。非常感谢你的帮助!