繁体   English   中英

反串印刷法

[英]Reverse string printing method

我正在尝试解决以下问题,但是如何编写接受 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);
    }
}

我强烈建议您阅读基本教程

你可以简单地做:

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因为您是从静态方式main方法)引用它的。 如果您不希望它是static ,则必须通过object访问它。

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

如何编写接受 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;    
}

像这样的东西:

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

使用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𝕆𝕃

另请参阅:还有其他方法可以删除字符串中的所有空格吗?

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 + "\".");
}

在主调用函数

printReverse(original);

试试这个:

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

    for (int i = str.length() - 1; i >= 0; i--) {
        revString = revString + str.charAt(i);
    }
    return revString;
}
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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM