反向字符串打印方法

Posted

技术标签:

【中文标题】反向字符串打印方法【英文标题】:Reverse string printing method 【发布时间】:2013-12-17 05:04:59 【问题描述】:

我正在尝试解决以下问题,但是如何编写接受 String 作为参数的方法?

编写一个名为printReverse 的方法,它接受String 作为 参数并以相反的顺序打印字符。如果空 字符串作为参数传递,该方法不应产生任何输出。 一定要编写一个 main 方法来令人信服地展示你的 程序在行动。不要使用相反的方法 StringBuilderStringBuffer 上课!

到目前为止,我已经以更简单的方式解决了它:

import java.util.Scanner;

class ReverseString 
    public static void main(String args[]) 
        String original, reverse = "";
        Scanner in = new Scanner(System.in);

        System.out.println("Enter a string to reverse");
        original = in.nextLine();

        int length = original.length();

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

        System.out.println("Reverse of entered string is: " + reverse);
    

【问题讨论】:

【参考方案1】:
private static void printReverse(String org) 
    StringBuffer buffer = new StringBuffer(org);
    String reversedStr = buffer.reverse().toString();
    System.out.println("The reverse of the string \""
            + str + "\" is \"" + reversedStr + "\".");

在main调用函数

printReverse(original);

【讨论】:

【参考方案2】:

使用 Java 9 你可以实现类似的东西。此代码适用于常规字符和代理对

public static void printReverse(String str) 
    // character code points
    str.codePoints()
            // character as string
            .mapToObj(Character::toString)
            // concatenate in reverse order
            .reduce((a, b) -> b + a)
            // output
            .ifPresent(System.out::println);


public static void main(String[] args) 
    // regular characters
    printReverse("lorem ipsum");
    // surrogate pairs
    printReverse("\uD835\uDD43\uD835\uDD46R\uD835\uDD3C\uD835\uDD44" +
            " \uD835\uDD40P\uD835\uDD4A\uD835\uDD4C\uD835\uDD44");

输出:

muspi merol
???P? ??R??

另见:Is there any other way to remove all whitespaces in a string?

【讨论】:

【参考方案3】:
package dowhile;
public class Dowhile 
    public static void main(String[] args) 
        // TODO code application logic here
        String message = "i love java programming";
        int msglength = message.length();

        int index = msglength - 1;
        while (index >= 0) 
            System.out.print(message.charAt(index));
            index--;
        
    

输出:

gnimmargorp avaj evol i

【讨论】:

【参考方案4】:

试试这个:

private static String reverseString(String str) 
    String revString = "";

    for (int i = str.length() - 1; i >= 0; i--) 
        revString = revString + str.charAt(i);
    
    return revString;

【讨论】:

【参考方案5】:

我强烈建议您通过basic tutorial。

你可以这样做:

private static String myReverse(String str) 
    String reverse = "";
    int length = str.length();
    for( int i = length - 1 ; i >= 0 ; i-- ) 
       reverse = reverse + str.charAt(i);
    
    return reverse;

在您的main 中,您只需:

String reversed = myReverse(in.nextLine());

请注意,方法static,因为您是从static manner(main 方法)引用它。如果您不希望它是 static,则必须通过 object 访问它。

另请注意,对于 for 循环,始终使用大括号是一种很好的做法,即使它包含单行也是如此。

【讨论】:

【参考方案6】:

如何编写接受String作为参数的方法?

public static String reverse(String forward) 
   char[] strChar = forward.toCharArray();
   String reverse = "";

   for( int i = strChar.length - 1 ; i >= 0 ; i-- ) 
       reverse = reverse + strChar[i];

   return reverse;

但是对于带有+ 运算符的大字符串附加字符可能效率低下。使用上述方法反转字符串将导致 uni-code 不匹配错误。因为它反转了代码单元而不是字符。实际上有一个内置支持可以使用 StringBuilder 反转字符串,它可以正常工作:

public static String reverse(String forward) 
   StringBuilder builder = new StringBuilder(forward);
   String reverse = builder.reverse().toString();
   return reverse;    

【讨论】:

【参考方案7】:

类似这样的:

public class StringUtils 
    public static String reverse(String forward) 
        String result = "";
        // Put your code here
        return result;
    

【讨论】:

以上是关于反向字符串打印方法的主要内容,如果未能解决你的问题,请参考以下文章

小练习---反向打印字符串

将参数字符串中的字符反向排列,不是逆序打印。用递归实现

在 Java 中打印 Unicode 或补充字符

python进阶练习之——反向输出

python中怎么输出一个字符串25遍?

在C中打印反转的字符串/数组