反向字符串打印方法
Posted
技术标签:
【中文标题】反向字符串打印方法【英文标题】:Reverse string printing method 【发布时间】:2013-12-17 05:04:59 【问题描述】:我正在尝试解决以下问题,但是如何编写接受 String 作为参数的方法?
编写一个名为
printReverse
的方法,它接受String
作为 参数并以相反的顺序打印字符。如果空 字符串作为参数传递,该方法不应产生任何输出。 一定要编写一个 main 方法来令人信服地展示你的 程序在行动。不要使用相反的方法StringBuilder
或StringBuffer
上课!
到目前为止,我已经以更简单的方式解决了它:
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;
【讨论】:
以上是关于反向字符串打印方法的主要内容,如果未能解决你的问题,请参考以下文章