Java 为什么选择StringBuilder';s delete将字符串向左移动,不删除最后一个字符?
我是新来的。 我试图找出如何删除字符串中的最后一个字符,但没有成功。 我在StringBuilder中使用我的代码 例如,我有一串“abcde” 我想在删除第一个字符-字符串bcde后获取 但我得到了字符串bcdee。 我一直在删除-最后一个字符没有被删除 我想删除字符串中的第一个字符,并且在末尾不留任何内容Java 为什么选择StringBuilder';s delete将字符串向左移动,不删除最后一个字符?,java,Java,我是新来的。 我试图找出如何删除字符串中的最后一个字符,但没有成功。 我在StringBuilder中使用我的代码 例如,我有一串“abcde” 我想在删除第一个字符-字符串bcde后获取 但我得到了字符串bcdee。 我一直在删除-最后一个字符没有被删除 我想删除字符串中的第一个字符,并且在末尾不留任何内容 StringBuilder test = new StringBuilder(); test.append("abcde");
StringBuilder test = new StringBuilder();
test.append("abcde");
test.deleteCharAt(0);
test.deleteCharAt(0);
test.deleteCharAt(0);
test.deleteCharAt(0);
运行此代码之后
我得到:我想得到:
bcdee bcde
cdeee cde
deeee de
eeeee e
我想知道如何删除字符串中的最后一个字符
要删除字符串中的最后一个字符
:
String s = someString.substring(0, someString.length() - 1)
请注意,字符串
是可求和的,因此上面实际上是在创建一个新的字符串
要删除StringBuilder中的最后一个字符,请执行以下操作:
someStringBuilder.setLength(someStringBuilder.length() - 1);
还可以使用删除最后一个字符
someStringBuilder.deleteCharAt(someStringBuilder.length() - 1);
上面的代码片段都假设有最后一个要删除的字符
您的代码调用
deleteCharAt(0)
。这将删除第一个字符,而不是最后一个字符
但您的示例似乎要求删除字符串末尾的重复字符。为此,您需要一个循环:
pseudocode
while last character equals second to last character:
remove last character
看看你是否能自己编码…首先,你的代码:
StringBuilder test = new StringBuilder();
test.append("abcde");
System.out.println(test);
test.deleteCharAt(0);
System.out.println(test);
test.deleteCharAt(0);
System.out.println(test);
test.deleteCharAt(0);
System.out.println(test);
test.deleteCharAt(0);
System.out.println(test);
产出:
abcde
bcde
cde
de
正如你在原始问题中提到的那样,这是正确的,没有任何额外的e
s。所以,试着找出你的代码中还有什么导致了这一点
为什么在StringBuilder中将字符串向左移动而不删除最后一个字符 它移动,因为,通过
test.deleteCharAt(0)
,您显式地告诉Java在特定(0
,在本例中)索引处删除字符,因此新字符串不会以空字符开头;但是,它应该是nt,并且它不会删除最后一个字符,并且最后一个额外字符永远不会追加(没有额外的e
)
除了
.setLength()
和.subString()
之外,您只需使用相同的.deleteCharAt(int)
API,并执行以下操作:
StringBuilder test = new StringBuilder();
test.append("abcde");
System.out.println(test);
test.deleteCharAt(test.length()-1);
System.out.println(test);
test.deleteCharAt(test.length()-1);
System.out.println(test);
test.deleteCharAt(test.length()-1);
System.out.println(test);
test.deleteCharAt(test.length()-1);
System.out.println(test);
我无法复制:
StringBuilder测试=新建StringBuilder();测试。附加(“abcde”);测试。删除字符(0);系统输出打印LN(测试)代码>打印“bcde”如何打印?如果我使用java.lang.StringBuilder
类并添加System.out.println(测试)代码>在您的代码之后,它会打印“e”,非常感谢您的支持,当我查看调试时-我看到字符串本身在最后没有被删除,我不明白为什么。@dustyeav欢迎使用堆栈溢出。请学习如何使用堆栈溢出,并阅读如何提高问题的质量。然后,您的问题将包括您的源代码,这些源代码可以由其他人编译和测试。StringBuilder
不会覆盖尾随字符,因为它不是必需的。StringBuilder
包含一个字段size
,用于记录有效内容的长度。size
字符之后的字符数组中的所有内容都不重要。非常感谢您的帮助,当我调试时-我仍然在末尾看到未删除的字符串。您可能误解了StringBuilder
内部数据结构。不要使用调试器,尝试调用StringBuilder.toString
并打印结果。