在面试资料库中看到这个问题。有办法吗?
我的猜测是,这是一个棘手的问题。由于字符串是不可变的,因此无法在常量空间中执行此操作。
答案 0 :(得分:2)
反转Java String
要比想象的要困难得多。首先,许多程序员认为String
是一个字符数组,每个字符为char
。但是,尽管名称如此,char
与"字符"不同。 Java字符串使用UTF-16编码,因此一些"字符" (用Unicode术语,"代码点")用2 char
编码。更糟糕的是,其中一些"字符"实际上是修饰符:字符修改下一个字符(通常是添加重音)。必须将这些对字符视为一个单元,而不是单独反转。
最后,你可能会问为什么反转一个字符串?这是一个人为的问题。在应用程序中没有人需要文本反转,因为反转一些有用的,有意义的文本会产生无用的胡言乱语。
答案 1 :(得分:1)
使用反射怎么样? 像:
import java.lang.reflect.Field;
public class StringReverseTest {
public static void main(String[] args)
throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {
Class<String> s = String.class;
Field m = s.getDeclaredField("value");
m.setAccessible(true);
String a = "1234567890";
char[] cs = (char[]) m.get(a);
for (int i = 0; i < cs.length / 2; i++) {
char t = cs[i];
cs[i] = cs[cs.length - 1 - i];
cs[cs.length - 1 - i] = t;
}
System.out.println(a);
}
}
它将输出0987654321。 但只适用于面试,必须避免使用任何产品代码。