Java StringBuilder方法deleteCharAt不删除字符
我试图使用deleteCharAt(0)方法删除位置0处的字符,并将该字符(已复制)附加到末尾。字符将追加到结尾,但方法deleteCharAt(0)未执行。我真的不知道为什么它不起作用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(); /
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实例。非常感谢你的帮助!