3

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

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

还有一些事情,但是我什至还没有达到这一点,并且不想要求任何人完全为我编写代码。在搞砸了一段时间后,我几乎完成了(我相信,除了一些区域)。

让我绊倒的是倒退的词。我们需要使用 prinf 将输出整齐地放入列中,但如果我一次读取每个字符,我就无法做到这一点。所以我尝试设置 aString backwardsWord = "";并添加每个字符。

这是让我绊倒的部分:

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

    

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

例如:如果我向后打印 cat、dog 和 rat,它会显示

交战委员会

塔戈德

塔哥达

我显然希望它阅读

交战委员会

上帝

柏油

任何帮助,将不胜感激。

4

3 回答 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()

这将创建一个新StringBuilder的字符 from upperCaseWord,反转字符然后将最终字符串存储在backwardsWord

于 2013-09-25T22:50:10.987 回答
3

你在哪里声明字符串 backsWord?

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

确保你正在折腾 backsWord = ""; 在单词之间重置它的价值,这应该可以解决您的问题。

在没有看到更多代码的情况下,我无法告诉您确切的放置位置。

于 2013-09-25T22:55:00.917 回答
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());
  }
}
于 2013-09-25T22:51:52.480 回答