【问题标题】:JAVA Reversing a string on multiple lines outputJAVA在多行输出上反转字符串
【发布时间】:2016-07-22 20:28:24
【问题描述】:

为什么在我的程序中我在一行上得到输出?像 abc123... 我希望我的输出打印在多行上,与我的输入相同..

import java.util.Scanner;

 class Reverse
 {
   public static void main(String args[])
   {
      String original;
      String reverse = "";

      Scanner kbd = new Scanner(System.in);

      while (kbd.hasNextLine()) {
        original = kbd.nextLine();

        int length = original.length();
        for ( int i = length - 1 ; i >= 0 ; i-- ) {

       reverse = reverse + original.charAt(i);
        }
      }
        System.out.println(reverse);
   }
 }

例如应该是这样的:

input: abc
       123
       ...
output:cba
       321
       ...

【问题讨论】:

  • 请正确缩进您的代码。

标签: java loops while-loop reverse


【解决方案1】:

这是一种方法:

import java.util.Scanner;

class Reverse {
    public static void main(String args[])
    {
        String original;
        String reverse = "";

        Scanner kbd = new Scanner(System.in);


        StringBuilder output = new StringBuilder();

        while (kbd.hasNextLine()) 
        {
            original = kbd.nextLine();
            StringBuilder sb = new StringBuilder(original);
            output.append(sb.reverse().toString()).append("\n");
        }
        System.out.println(output.toString());
    }
}

编辑我注意到,在您的问题中,您似乎只想在提供所有输入后打印输出。我已经修改了原始答案中的代码来执行此操作。

【讨论】:

  • 对不起,但这不是我想要的,我想继续在多行上输入所有输入,然后按 CTRL+D 到达 EOF 并在多行上获取所有输出..无论如何感谢您的帮助
  • 再看一下代码。我在你评论的时候更新它:)
  • 非常感谢!这正是我想要的!欣赏它
  • 太棒了。很高兴我能帮助你。如果这个答案对你有用,你能接受吗?
【解决方案2】:
import java.io.*;
import java.util.*;

public class reverseString {
    public static void main(String[] args) {
        String input="";
        System.out.println("Enter the input string");
        try
        {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            input = br.readLine();
            char[] try1= input.toCharArray();
            for (int i=try1.length-1;i>=0;i--)
            System.out.print(try1[i]);
        }
        catch (IOException e) {
            e.printStackTrace();
        }
}}

【讨论】:

    【解决方案3】:

    试试这个:

     package stackoverflow;
        import java.util.Scanner;
         class Reverse
         {
           public static void main(String args[])
           {
              String original;
              String reverse = "";
    
              Scanner kbd = new Scanner(System.in);
    
              while (kbd.hasNextLine()) {
                original = kbd.nextLine();
                //befor you add the reversed string add a jump line firs
                if(reverse.length()>0)reverse=reverse+"\n";
    
                int length = original.length();
                for ( int i = length - 1 ; i >= 0 ; i-- ) {
    
               reverse = reverse + original.charAt(i);
                }
              }
                System.out.println(reverse);
           }
         }
    

    【讨论】:

      【解决方案4】:

      你应该改变这部分

      for ( int i = length - 1 ; i >= 0 ; i-- ) {
        reverse = reverse + original.charAt(i);
      }
      

      for ( int i = length - 1 ; i >= 0 ; i-- ) {
        reverse = reverse + original.charAt(i);
      }
      reverse = reverse + '\n';
      

      这将添加换行符。

      我有一个建议给你 - 使用 StringBuilder 新的反向字符串 像这样:

      public static void main(String args[]) {
          String original;
          StringBuilder sbReverse = new StringBuilder();
      
          Scanner kbd = new Scanner(System.in);
          while (kbd.hasNextLine()) {
              original = kbd.nextLine();
      
              int length = original.length();
              for (int i = length - 1; i >= 0; i--) {
                  sbReverse.append(original.charAt(i));
              }
              sbReverse.append('\n');
          }
      
          System.out.println(sbReverse.toString());
      }
      

      原因 - 在 Java 中,字符串是不可变的。 这意味着每次执行reverse = reverse + original.charAt(i); 时都会在内存中创建一个新字符串。

      【讨论】:

        【解决方案5】:

        因为您使用的是System.out.printf(),所以您在一行中获得了输出。请改用System.out.println()

        PS:反转字符串的更简单方法是使用 StringBuilder 中的 reverse()。

        reverse = new StringBuilder(original).reverse().toString();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-25
          • 2021-02-13
          • 1970-01-01
          • 2011-11-26
          • 2013-04-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多