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

3

我正在尝试读取一个字符串文件,并打印出一些内容:

  • 字符串本身
  • 字符串反转后的结果(大写字母)
  • 字符串长度

还有一些其他的东西,但我还没有到达那个步骤,也不想让任何人完全代替我编写代码。经过一段时间的研究和试验,我已经完成了大部分工作(我相信除了一些细节之外都完成了)。

让我困扰的一点是反向单词。我们需要使用 printf 将输出整齐地放入列中,但如果我每次读取每个字符,就无法这样做。所以我尝试设置一个String backwardsWord = "";,并添加每个字符。

这部分让我感到困惑:

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

    

我的问题是,当我打印时,第一个单词正常工作。但是,之后的每个单词都添加到前一个单词中。
例如:如果我以相反的顺序打印猫、狗和老鼠,它会显示
TAC
TACGOD
TACGODTAR
我显然希望它读成
TAC
GOD
TAR
任何帮助将不胜感激。

文件中的字符串是如何分隔的?每行一个字符串吗? - William Gaul
2
你是否在循环之前每次都初始化变量backwardsWord? - Mohammed Falha
2
你应该研究一下 StringBuilder.reverse()。它能够轻松地完成所有的反转操作。 - David says Reinstate Monica
3个回答

4

看起来你的变量backwardsWord在单词之间没有被重置,总是在追加一个字符。最简单的解决方法是在循环之前清除backwardsWord,将其设置为空字符串。

backwardsWord = ""; //Clear any existing characters from backwardsWord

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


如果您一次一个字符地构建字符串,那么将会使用大量的内存,因为Java字符串是不可变的

为了更有效地进行此操作,请改用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

这样做的额外好处是每次重置backwardsWord。
最后,由于你的目标是将字符串倒序,我们实际上可以完全不使用循环来实现如此回答中所示
backwardsWord = new StringBuilder(upperCaseWord).reverse().toString()

这将使用来自upperCaseWord的字符创建一个新的StringBuilder,反转字符并将最终字符串存储在backwardsWord中。

3

你在哪里声明了字符串backwardsWord?

如果你没有在单词之间清除它,那么分配给该字符串的内存空间仍将包含先前添加的字符。

确保在单词之间插入backwardsWord = "";以重置其值,这样应该可以解决你的问题。

如果没有看到更多你的代码,我不能告诉你确切的放置位置。


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

是的,结果是 - SEL SELBARÉSIM。 - dganesh2002

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接