我正在尝试来自Sphere Online裁判(SPOJ)的The Next Palindrome问题,在那里我需要找到一个最多为一百万位数字的整数的回文。我想过使用Java的函数来反转字符串,但是它们允许字符串这么长吗?
发布于 2009-07-24 20:26:56
我相信它们最多可以有2^31-1个字符,因为它们由内部数组保存,并且在Java中数组是由整数索引的。
发布于 2016-12-08 02:42:51
虽然理论上可以使用Integer.MAX_VALUE字符,但JVM可以使用的数组大小是有限制的。
public static void main(String... args) {
for (int i = 0; i < 4; i++) {
int len = Integer.MAX_VALUE - i;
try {
char[] ch = new char[len];
System.out.println("len: " + len + " OK");
} catch (Error e) {
System.out.println("len: " + len + " " + e);
}
}
}
在Oracle Java 8上更新92打印
len: 2147483647 java.lang.OutOfMemoryError: Requested array size exceeds VM limit
len: 2147483646 java.lang.OutOfMemoryError: Requested array size exceeds VM limit
len: 2147483645 OK
len: 2147483644 OK
注意:在Java9中,字符串将使用byte[],这意味着多字节字符将使用多个字节,并进一步减少最大值。如果你有所有四个字节的代码点,例如表情符号,你只能得到大约5亿个字符
发布于 2009-07-24 21:58:28
您是否考虑过使用BigDecimal
而不是String
来保存您的数字?
https://stackoverflow.com/questions/1179983
复制相似问题