How to print several strings backwards in Java

后端 未结 3 1942
青春惊慌失措
青春惊慌失措 2021-01-14 09:37

I am trying to take a file full of strings, read it, then print out a few things:

  • The string
  • The string backwards AND uppercase
  • The string len
相关标签:
3条回答
  • 2021-01-14 09:59

    Where are you declaring the String backwardsWord?

    If you don't clear it between words then the memory space allocated to that string will still contain the previously added characters.

    Make sure you are tossing in a backwardsWord = ""; in between words to reset it's value and that should fix your problem.

    Without seeing more of your code I can't tell you exactly where to put it.

    0 讨论(0)
  • 2021-01-14 10:08

    This should do the job ->

    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());
      }
    }
    
    0 讨论(0)
  • It looks like your variable backwardsWord is always appending a character without being reset between words. The simplest fix is to clear the backwardsWord just before your loop by setting it to empty string.

    backwardsWord = ""; //Clear any existing characters from backwardsWord
    
    for(int i = upperCaseWord.length() - 1; i >= 0; i--)
    {
        backwardsWord += (upperCaseWord.charAt(i) + "");
    }
    


    If you are building up a String one character at a time you will be using a lot of memory because Java Strings are immutable.

    To do this more efficiently use a StringBuilder instead. This is made for building up characters like what you are doing. Once you have finished you can use the toString method to get the String out.

    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
    

    This has the added benefit of resetting the backwardsWord each time.


    Finally, since your goal is to get the String in reverse we can actually do it without a loop at all as shown in this answer

    backwardsWord = new StringBuilder(upperCaseWord).reverse().toString()
    

    This creates a new StringBuilder with the characters from upperCaseWord, reverses the characters then stores the final string in backwardsWord

    0 讨论(0)
提交回复
热议问题