StringBuilder 方法 deleteCharAt 不删除字符

StringBuilder method deleteCharAt not deleting the character

我正在尝试使用 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
    }

我需要向 assemble 所有子字符串添加另一个 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
    }