【问题标题】:Reverse String characters in java在java中反转字符串字符
【发布时间】:2021-02-13 12:48:22
【问题描述】:

我正在尝试使用 java 中的方法来反转字符串,我可以获取字符串的所有元素并通过循环按顺序打印出来,我的问题是反转字符串,使得第一个出现在最后,最后一个出现首先,我试图找到一个反向功能无济于事......这是我目前所拥有的......

private static void palindrome() {
    char[] name = new char[]{};
    String name1;
    System.out.println("Enter your name");
    Scanner tim = new Scanner(System.in);
    name1 = tim.next();
    int len = name1.length();
    for (int i = 0; i <= len; ++i) {
        char b = name1.charAt(i);
        System.out.println(b + " ");
    }
}

该循环成功地打印出字符串中的单个字符。

【问题讨论】:

    标签: java string character reverse


    【解决方案1】:

    添加reverse()功能供大家理解

    import java.util.Scanner;
    
    public class P3 {
        public static void main(String[] args) {
            palindrome();
        }
    
        private static void palindrome() {
            char[] name = new char[]{};
            String name1;
            System.out.println("Enter your name");
            Scanner tim = new Scanner(System.in);
            name1 = tim.next();
    
            String nameReversed = reverse(name1);
            int len = name1.length();
            for (int i = 0; i < len; ++i) {
                char b = name1.charAt(i);
                System.out.println(b + " ");
            }
        }
    
        private static String reverse(String name1) {
            char[] arr = name1.toCharArray();
            int left = 0, right = arr.length - 1;
            while (left < right) {
                //swap characters first and last positions
                char temp = arr[left];
                arr[left++] = arr[right];
                arr[right--] = temp;
            }
            return new String(arr);
        }
    }
    

    【讨论】:

    • 第 109 行出现错误:stringindeoutofboundsexception
    【解决方案2】:

    你只需要向后循环数组:

    for (int i = len - 1; i >= 0; i--) {
        char b = name1.charAt(i);
        System.out.println(b + " ");
    }
    

    您从索引在 length - 1 位置的最后一个元素开始,然后向下迭代到第一个元素(索引为零)。

    此概念并非特定于 Java,也适用于提供基于索引的访问的其他数据结构(例如列表)。

    【讨论】:

      【解决方案3】:

      你可以像这样使用StringBuilder

      import java.lang.*;
      import java.io.*;
      import java.util.*;
      
      class ReverseString {
          public static void main(String[] args) {
              String input = "Geeks for Geeks";
      
              StringBuilder input1 = new StringBuilder();
      
              // append a string into StringBuilder input1
              input1.append(input);
      
              // reverse StringBuilder input1
              input1 = input1.reverse();
      
              // print reversed String
              System.out.println(input1);
          }
      }
      

      你也可以修改你的代码来做到这一点:

      1 -

      for (int i = 0; i <= len; ++i) {
          char b = name1[len - i];
          System.out.println(b + " ");
      }
      

      2 -

      for (int i = len; i >= 0; --i) {
          char b = name1.charAt(i);
          System.out.println(b + " ");
      }
      

      【讨论】:

        【解决方案4】:

        使用StringBuilder类的内置reverse()方法。

        private static void palindrome() {
            String name1;
            StringBuilder input = new StringBuilder();
            System.out.println("Enter your name");
            Scanner tim = new Scanner(System.in);
            name1 = tim.next();
            input.append(name1);
            input.reverse();
            System.out.println(input);
        }
        

        【讨论】:

          【解决方案5】:

          使用 Java 9 codePoints,您可以按如下方式反转字符串。此示例显示了包含 代理对 的字符串的反转。它也适用于常规字符。

          String str = "????? ?????";
          String reversed = str.codePoints()
                  // Stream<String>
                  .mapToObj(Character::toString)
                  // concatenate in reverse order
                  .reduce((a, b) -> b + a)
                  .get();
          
          System.out.println(reversed); // ????? ?????
          

          另见:Reverse string printing method

          【讨论】:

            猜你喜欢
            • 2011-11-26
            • 1970-01-01
            • 1970-01-01
            • 2015-04-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-06-25
            • 2016-01-06
            相关资源
            最近更新 更多