1

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

    }
4

2 回答 2

0

您的代码段未显示您在哪里进行初始化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
    }
于 2016-10-22T22:01:28.003 回答
0

我需要添加另一个 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
    }
于 2016-10-22T22:35:03.493 回答