【问题标题】:how to revearse a string?如何反转字符串?
【发布时间】:2013-10-25 21:46:04
【问题描述】:

似乎无法让它工作。试图让它像镜子一样向后读取而不使用缓冲区类。

  public static void main(String[] args) {



   Scanner keyboard = new Scanner(System. in); 

   System.out.println("Enter a phrase:");

   String phrase = keyboard.nextLine();
   String Rphrase;

   int n = phrase.length();
   int r = 0;

   do{
        n--; r++;
    Rphrase[r] = phrase[n];

  }while(n >= 0);


   System.out.println(Rphrase);

【问题讨论】:

  • 您发布的代码中有多个错误。我强烈建议您删除所有内容并重新开始。这可以简单地通过 1.) 读入String 2.) 将String 转换为charsarray 3.) 使用for-loop 向后迭代char[]。跨度>
  • String rPhrase = new StringBuilder(phrase).reverse().toString();
  • @Tdorno:是什么让你认为他在使用图书馆?
  • 好像是类名! Rphrase 在这里是一个变量 :D CamelCasing 的重要性 :)
  • @Sujay 啊,我的坏 Rphrase 显示不正确,因为他大写了。但这种方法仍然很糟糕。 =D

标签: java string reverse


【解决方案1】:

我提供了 4 种方法来反转字符串的输出。

选项 1:

只需向后迭代字符串。

for (int i=phrase.length()-1; i>-1; i--) { 
    System.out.print(foo.charAt(i));  
}

选项 2:

如果你想把它放在另一个缓冲区中,你可以这样做:

char[] buffer = new char[phrase.length()];
index = 0;
for (int i=phrase.length()-1; i>-1; i--) { 
    buffer[index++] = foo.charAt(i);  
}

选项 3:

您说您不想使用缓冲区类(我认为您指的是 StringBuffer 所以我假设您也不想使用 StringBuilder)所以这里是你可以如何严格使用字符串(这是相当低效的,因为每次迭代都会构造一个新的字符串):

String foo = "";
for (int i=phrase.length()-1; i>-1; i--) { 
    foo += foo.charAt(i);  
}

选项 4:

不过,最可能更有效的方法是使用 StringBuilder

StringBuilder sb = new StringBuilder(foo.length());
for (int i=foo.length()-1; i>-1; i--) {
    sb.append(foo.charAt(i));
}
String reverse = sb.toString();

请参阅此非常简单使用 StringBuilder 进行字符串反转:
Reverse a string in Java

【讨论】:

    【解决方案2】:

    试试:

    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System. in); 
    
        System.out.println("Enter a phrase:");
    
        String phrase = keyboard.nextLine();
        String rPhrase = "";
        for (int i = phrase.length() - 1; i >= 0; i--)
            rPhrase += phrase.charAt(i);
        System.out.println(rPhrase);
    }
    

    【讨论】:

    • 让OP找出问题然后自己解决问题不是更好吗?而不是只为他做?
    • 如果你要给他写,不要保留Rphrase变量名,变量总是以小写字母开头。
    • @Tdorno 我想是的.. 但为时已晚,抱歉 :(
    【解决方案3】:

    这就是你需要的。

    String reverse = "";
    String toReverse = "hello";
    
    for(int i = 0; i<toReverse.length();i++){
        reverse += toReverse.substring(i,i+1);
    }
    
    System.out.println(reverse);
    

    【讨论】:

      【解决方案4】:

      一些提示,而不是完整的解决方案...

      n = 0 时,您的循环将再运行一次迭代,这将导致尝试访问索引-1。所以不妨试试n &gt; 0 作为你的条件。

      如果字符串为空会发生什么?它还会在进入循环之前尝试访问索引-1。也许你应该把条件放在开头。

      String 不支持 [] 运算符 - 尝试:

      Rphrase += phrase.charAt(n);
      

      在这种情况下,您不妨摆脱r

      【讨论】:

        【解决方案5】:

        你必须做一个递减,这样它才能把它的值读回前面

        for (int i = name.length() - 1, j = 0; i >= 0; i--, j++) {
        newName[j] = name.charAt(i); enter code here

        }

            System.out.println(newName); 
        

        }

        【讨论】:

          【解决方案6】:

          只需使用 StringBuilder.reverse

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-30
            • 2016-01-06
            • 1970-01-01
            • 2012-06-26
            • 1970-01-01
            • 2014-02-26
            相关资源
            最近更新 更多