Вопрос-ответ

How many characters can a Java String have?

Сколько символов может содержать строка Java?

Я пытаюсь решить следующую задачу с палиндромом из Sphere Online Judge (SPOJ), где мне нужно найти палиндром для целого числа длиной до миллиона цифр. Я думал об использовании функций Java для обращения строк вспять, но позволят ли они сделать строку такой длины?

Переведено автоматически
Ответ 1

Вы должны быть в состоянии получить строку такой длины


  1. Integer.MAX_VALUE всегда 2,147,483,647 (231 - 1)
    (Определяется спецификацией Java, максимальный размер массива, который класс String использует для внутреннего хранения)
    ИЛИ


  2. Half your maximum heap size (поскольку каждый символ равен двум байтам), в зависимости от того, что меньше.


Ответ 2

Я полагаю, что они могут содержать до 2 ^ 31-1 символов, поскольку они хранятся во внутреннем массиве, а массивы в Java индексируются целыми числами.

Ответ 3

Хотя теоретически вы можете использовать целое число.Символы 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 update 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

Примечание: в Java 9 строки будут использовать byte[], что будет означать, что многобайтовые символы будут использовать более одного байта и еще больше уменьшат максимальное значение. Если у вас есть все четыре точки байтового кода, например, смайлики, вы получите всего около 500 миллионов символов

Ответ 4

Рассматривали ли вы возможность использования BigDecimal вместо String для хранения ваших чисел?

java string