我正在尝试一个充满字符串的文件,阅读它,然后打印出一些东西:
还有一些东西,但是我甚至没有达到这一点,也不想让任何人完全为我编写代码。在搞乱了一段时间后,我几乎完成了它(我相信,除了一些区域)。
绊倒我的那块是向后的词。我们需要使用prinf将输出整齐地放入列中,但如果我一次读取每个char,我就不能这样做。所以我尝试设置String backwardsWord = "";
并添加每个字符。
这是让我失望的作品:
for(int i = upperCaseWord.length() - 1; i >= 0; i--)
{
backwardsWord += (upperCaseWord.charAt(i) + "");
}
我的问题是,当我打印它时,第一个单词正常工作。但是,之后的每个单词都会添加到上一个单词中。
例如:如果我向后打印猫,狗和老鼠,则会显示
TAC
TACGOD
TACGODTAR
我显然想要阅读
TAC
GOD
TAR
任何帮助都将不胜感激。
答案 0 :(得分:4)
看起来你的变量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
方法获取字符串。
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。
最后,由于你的目标是反过来使用String,我们实际上可以在没有循环的情况下完成as shown in this answer
backwardsWord = new StringBuilder(upperCaseWord).reverse().toString()
这会创建一个包含StringBuilder
字符的新upperCaseWord
,反转字符,然后将最终字符串存储在backwardsWord
答案 1 :(得分:3)
你在哪里声明字符串backwardsWord?
如果不在单词之间清除它,则分配给该字符串的内存空间仍将包含先前添加的字符。
确保你正在向后折腾=“”;在单词之间重置它的价值,这应该解决你的问题。
如果没有看到更多的代码,我无法确切地告诉你它应该放在哪里。
答案 2 :(得分:1)
这应该可以胜任 - >
class ReverseWordsInString{
public static String reverse(String s1){
int l = s1.length();
if (l>1)
return(s1.substring(l-1) + reverse(s1.substring(0,l-1)));
else
return(s1.substring(0));
}
public static void main(String[] args){
String st = "Cat Dog Rat";
String r = "";
for (String word : st.split(" "))
r += " "+ reverse(word.toUpperCase());
System.out.println("Reversed words in the given string: "+r.trim());
}
}