如何在Java中向后打印多个字符串

时间:2013-09-25 22:47:27

标签: java string for-loop reverse

我正在尝试一个充满字符串的文件,阅读它,然后打印出一些东西:

  • 字符串
  • 字符串向后和大写
  • 字符串长度

还有一些东西,但是我甚至没有达到这一点,也不想让任何人完全为我编写代码。在搞乱了一段时间后,我几乎完成了它(我相信,除了一些区域)。

绊倒我的那块是向后的词。我们需要使用prinf将输出整齐地放入列中,但如果我一次读取每个char,我就不能这样做。所以我尝试设置String backwardsWord = "";并添加每个字符。

这是让我失望的作品:

for(int i = upperCaseWord.length() - 1; i >= 0; i--)
{
    backwardsWord += (upperCaseWord.charAt(i) + "");
}   

我的问题是,当我打印它时,第一个单词正常工作。但是,之后的每个单词都会添加到上一个单词中。

例如:如果我向后打印猫,狗和老鼠,则会显示

  

TAC

     

TACGOD

     

TACGODTAR

我显然想要阅读

  

TAC

     

GOD

     

TAR

任何帮助都将不胜感激。

3 个答案:

答案 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());
  }
}