我试图获取一个充满字符串的文件,阅读它,然后打印出一些东西:
>字符串
>字符串向后AND大写
>字符串长度
还有一些东西,但我还没有达到这一点,并且不想让任何人完全为我编写代码.在搞乱了一段时间之后,我几乎完成了它(我相信,除了一些区域).
绊倒我的那块是向后的词.我们需要使用prinf将输出整齐地放入列中,但如果我一次读取每个char,我就不能这样做.所以我尝试设置一个String backwardsWord =“”;并添加每个字符.
这是绊倒我的那件事:
for(int i = upperCaseWord.length() - 1; i >= 0; i--)
{
backwardsWord += (upperCaseWord.charAt(i) + "");
}
我的问题是,当我打印它时,第一个单词正常工作.但是,之后的每个单词都会添加到上一个单词中.
例如:如果我向后打印猫,狗和老鼠,它会显示出来
TAC
TACGOD
TACGODTAR
我显然想要它阅读
TAC
GOD
TAR
任何帮助,将不胜感激.
解决方法:
看起来你的变量backwardsWord总是附加一个字符,而不是在单词之间重置.最简单的解决方法是通过将其设置为空字符串来清除循环之前的backwardsWord.
backwardsWord = ""; //Clear any existing characters from backwardsWord
for(int i = upperCaseWord.length() - 1; i >= 0; i--)
{
backwardsWord += (upperCaseWord.charAt(i) + "");
}
如果你一次构建一个String一个字符,那么你将使用大量内存,因为Java Strings are immutable.
为了更有效地使用StringBuilder而不是这样做.这是为了像你正在做的那样建立角色.完成后,可以使用toString方法获取String.
StringBuilder builder = new StringBuilder(); //Creates the String builder for storing the characters
for(int i = upperCaseWord.length() - 1; i >= 0; i--)
{
builder.append(upperCaseWord.charAt(i)); //Append the characters one at a time
}
backwardsWord = builder.toString(); //Store the finished string in your existing variable
这具有每次重置backwardWord的额外好处.
最后,由于你的目标是反向获取字符串,我们实际上可以在没有循环的情况下完成它as shown in this answer
backwardsWord = new StringBuilder(upperCaseWord).reverse().toString()
这将创建一个带有来自upperCaseWord的字符的新StringBuilder,反转字符然后将最终字符串存储在backwardsWord中
标签:java,string,for-loop,reverse
来源: https://codeday.me/bug/20190725/1532979.html