【问题标题】:StringBuilder method deleteCharAt not deleting the characterStringBuilder 方法 deleteCharAt 不删除字符
【发布时间】:2016-10-22 21:34:05
【问题描述】:

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

    }

【问题讨论】:

  • 你能给出一个示例输入,你期望得到的输出和你得到的实际输出吗?
  • 我刚刚添加了一些。感谢您的帮助。

标签: java string stringbuilder substring arrayofstring


【解决方案1】:

您的 sn-p 没有显示您初始化 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
    }

【讨论】:

  • 我试过了,但现在我的整个字符串似乎都被删除了,我只剩下:
  • 我尝试过,但似乎现在我的整个字符串都被删除了,我只剩下“esttqw”(这是正确的,但只需要字符串的其余部分),而不是“esttqw esttqw esttqw”。再次感谢您。
  • @Bastard24 您需要以某种方式将encryptedSS 实例累积到完整的字符串中。目前尚不清楚您是如何在原始问题中发布的代码中执行此操作的,但如果您出于某种原因没有这样做 - 您应该这样做。
  • 我添加了另一个 StringBuilder 对象来积累 encryptedSS 实例。非常感谢您的帮助!
【解决方案2】:

我需要添加另一个 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
    }

【讨论】:

    猜你喜欢
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    相关资源
    最近更新 更多