我有一个字符串变量 hi
,其中包含 "Hello World"
。
我需要将其反转后打印出来。
我该如何做?我知道Java中已经内置了一种函数可以实现这个功能。
我有一个字符串变量 hi
,其中包含 "Hello World"
。
我需要将其反转后打印出来。
我该如何做?我知道Java中已经内置了一种函数可以实现这个功能。
public String reverse(String s) {
String reversedString = "";
for(int i=s.length(); i>0; i--) {
reversedString += s.charAt(i-1);
}
return reversedString;
}
public class StringReverse {
public static void main(String[] args) {
String str = "Dogs hates cats";
StringBuffer sb = new StringBuffer(str);
System.out.println(sb.reverse());
}
}
public static String reverse(String str)
{
// You get what you ask for ;)
if (str == null) return null;
// str.length() is equal to the number of unicode code points in a string
if (str.isEmpty() || str.length() == 1) return str;
final int[] codePoints = str.codePoints().toArray();
final int len = codePoints.length;
// swap in place
for(int i = 0; i < codePoints.length/2; i++)
{
int tmp = codePoints[i];
codePoints[i] = codePoints[len-i-1];
codePoints[len-i-1] = tmp;
}
return new String(codePoints,0,len);
}
如果您使用String.getBytes()来实现此操作,则所有字节都将被反转,这将导致所有UTF-8编码被反转,并且任何尝试使用不是int代码点的字符都将无法处理“星际平面”代码点(那些在BMP之外的代码点)。
作为一种通用解决方案,这种方法相当高效,但它非常简单,并且保证适用于任何字符串,这可能是您从“通用解决方案”中想要的。
唯一需要注意的是,如果您从UTF8/16编码的文件中读取字符串,则可能在开头有一个BOM,但这超出了问题的范围。
-Blue
StringUtils.reverse(hi)
String str = "Hello World";
char[] strCharArr = str.toCharArray();
for(int i = 0, k= strCharArr.length-1;i != k; i++, k--) {
char temp = strCharArr[i];
strCharArr[i] = strCharArr[k];
strCharArr[k] = temp;
}
System.out.println(String.valueOf(strCharArr));
public static String revString(String str){
char[] revCharArr = str.toCharArray();
for (int i=0; i< str.length()/2; i++){
char f = revCharArr[i];
char l = revCharArr[str.length()-i-1];
revCharArr[i] = l;
revCharArr[str.length()-i-1] = f;
}
String revStr = new String(revCharArr);
return revStr;
}
hi
连接到一个空字符串上并反转它,像这样:"".concat(hi).reverse()
这也是有效的JavaScript。
字符序列(或)字符串字符串家族:
String testString = "Yashwanth@777"; // ~1 1⁄4→D800₁₆«2²⁰
public static String reverseString_Stream(String str) {
IntStream cahrStream = str.chars();
final int[] array = cahrStream.map( x -> x ).toArray();
int from = 0, upTo = array.length;
IntFunction<String> reverseMapper = (i) -> ( Character.toString((char) array[ (upTo - i) + (from - 1) ]) );
String reverseString = IntStream.range(from, upTo) // for (int i = from; i < upTo ; i++) { ... }
.mapToObj( reverseMapper ) // array[ lastElement ]
.collect(Collectors.joining()) // Joining stream of elements together into a String.
.toString(); // This object (which is already a string!) is itself returned.
System.out.println("Reverse Stream as String : "+ reverseString);
return reverseString;
}
public static String reverseString( String reverse ) {
if( reverse != null && reverse != "" && reverse.length() > 0 ) {
char[] arr = reverse.toCharArray();
String temp = "";
for( int i = arr.length-1; i >= 0; i-- ) {
temp += arr[i];
}
System.out.println("Reverse String : "+ temp);
}
return null;
}
StringBuffer buffer = new StringBuffer(str);
System.out.println("StringBuffer - reverse : "+ buffer.reverse() );
String builderString = (new StringBuilder(str)).reverse().toString;
System.out.println("StringBuilder generated reverse String : "+ builderString );
StringBuffer具有与StringBuilder相同的方法,但StringBuffer中的每个方法都是同步的,因此它是线程安全的。
Java中的简单For循环
public void reverseString(char[] s) {
int length = s.length;
for (int i = 0; i < s.length / 2; i++) {
// swaping character
char temp = s[length - i - 1];
s[length - i - 1] = s[i];
s[i] = temp;
}
}
public class ReverseString {
public static void reverseString(char[] s) {
int i = 0;
int j = s.length - 1;
while (i < j) {
char temp = s[i];
s[i] = s[j];
s[j] = temp;
i++;
j--;
}
}
public static void main(String[] args) {
char[] input = {'h', 'e', 'l', 'l', 'o'};
reverseString(input);
System.out.println(new String(input)); // Output: "olleh"
}