StringBuilder插入方法
StringBuilder insert method
我正在尝试将一个字符插入到每个子字符串的开头而不是在子字符串的位置 0 插入,该方法是将字符插入到整个字符串的开头。例如:
Input: esttar apple%hc orange%hc annanabar eachpar
Expected output: test apple orange banana peach
Actual output: pbtest apple orange anana each
除 StringBuilder 插入方法外,一切正常。我的代码如下。非常感谢。
private String decryptText(String encrypted, String cipher){
StringBuilder stringBuilder = new StringBuilder(); //for manipulating the substrings
StringBuilder builder2 = new StringBuilder(); //StringBuilder object for returning and accumulating instances of decrypted
String decryptedSS = "";
cipher = cipher.replaceAll("-", ""); //replaces all the hyphens
char[] cipherKey = cipher.toCharArray(); //converts the cipherKey to a character array
char y1 = cipherKey[2];
String[] strArr = encrypted.split(" "); //splits the string into an array
for(String subStr : strArr){ //for each substring in the string array
stringBuilder.append(subStr); //copies the substring into a String Builder object
stringBuilder = stringBuilder.deleteCharAt(stringBuilder.length()-1); //deletes the last character
stringBuilder = stringBuilder.deleteCharAt(stringBuilder.length()-1); //deletes the last character
char first = stringBuilder.charAt(stringBuilder.length()-1); //copies the last character for prepending to the word if the word started with a consonant
if(stringBuilder.charAt(stringBuilder.length()-1) == y1){ //if the last character is equal to y1
stringBuilder.deleteCharAt(stringBuilder.length()-1); //delete it
}
else{ //******The problem resides in this else statement
stringBuilder.deleteCharAt(stringBuilder.length()-1); //delete the last character
stringBuilder.insert(0, first); //insert the copied character at the beginning of the substring
}
stringBuilder.append(" "); //appends a space to each word
decryptedSS = stringBuilder.toString(); //converts the StringBuilder object to a string
}
builder2.append(decryptedSS); //appends the decrypted substring to the StringBuilder object to concatenate the string
String decrypted = builder2.toString(); //converts the StringBuilder object to a string
return decrypted; //returns the decrypted string
}
这一行是问题所在:
stringBuilder.insert(0, first); //insert the copied character at the beginning of the substring
这里的stringBuilder
不代表当前的子串,而是你试图构建的最终解密后的字符串。这就是将值添加到整个字符串开头的原因。
您有几个选择:
您可以在循环结束时将 stringBuilder
的结果字符串添加到 builder2
,然后清除 stringBuilder
。根据您的代码编写方式,我想这就是您所期望的:
builder2.append(decryptedSS);
stringBuilder.setLength(0);
请注意,您还将删除循环外的 builder2.append(decryptedSS);
。
您可以在循环开始时保存 stringBuilder
的长度,然后插入该值而不是 0。
您可以在循环中完全修改 subStr
,并在循环结束时将完成的版本附加到 stringBuilder
。
我正在尝试将一个字符插入到每个子字符串的开头而不是在子字符串的位置 0 插入,该方法是将字符插入到整个字符串的开头。例如:
Input: esttar apple%hc orange%hc annanabar eachpar
Expected output: test apple orange banana peach
Actual output: pbtest apple orange anana each
除 StringBuilder 插入方法外,一切正常。我的代码如下。非常感谢。
private String decryptText(String encrypted, String cipher){
StringBuilder stringBuilder = new StringBuilder(); //for manipulating the substrings
StringBuilder builder2 = new StringBuilder(); //StringBuilder object for returning and accumulating instances of decrypted
String decryptedSS = "";
cipher = cipher.replaceAll("-", ""); //replaces all the hyphens
char[] cipherKey = cipher.toCharArray(); //converts the cipherKey to a character array
char y1 = cipherKey[2];
String[] strArr = encrypted.split(" "); //splits the string into an array
for(String subStr : strArr){ //for each substring in the string array
stringBuilder.append(subStr); //copies the substring into a String Builder object
stringBuilder = stringBuilder.deleteCharAt(stringBuilder.length()-1); //deletes the last character
stringBuilder = stringBuilder.deleteCharAt(stringBuilder.length()-1); //deletes the last character
char first = stringBuilder.charAt(stringBuilder.length()-1); //copies the last character for prepending to the word if the word started with a consonant
if(stringBuilder.charAt(stringBuilder.length()-1) == y1){ //if the last character is equal to y1
stringBuilder.deleteCharAt(stringBuilder.length()-1); //delete it
}
else{ //******The problem resides in this else statement
stringBuilder.deleteCharAt(stringBuilder.length()-1); //delete the last character
stringBuilder.insert(0, first); //insert the copied character at the beginning of the substring
}
stringBuilder.append(" "); //appends a space to each word
decryptedSS = stringBuilder.toString(); //converts the StringBuilder object to a string
}
builder2.append(decryptedSS); //appends the decrypted substring to the StringBuilder object to concatenate the string
String decrypted = builder2.toString(); //converts the StringBuilder object to a string
return decrypted; //returns the decrypted string
}
这一行是问题所在:
stringBuilder.insert(0, first); //insert the copied character at the beginning of the substring
这里的stringBuilder
不代表当前的子串,而是你试图构建的最终解密后的字符串。这就是将值添加到整个字符串开头的原因。
您有几个选择:
您可以在循环结束时将
stringBuilder
的结果字符串添加到builder2
,然后清除stringBuilder
。根据您的代码编写方式,我想这就是您所期望的:builder2.append(decryptedSS); stringBuilder.setLength(0);
请注意,您还将删除循环外的
builder2.append(decryptedSS);
。您可以在循环开始时保存
stringBuilder
的长度,然后插入该值而不是 0。您可以在循环中完全修改
subStr
,并在循环结束时将完成的版本附加到stringBuilder
。