Я полагаю, что при чтении вашего вопроса предел был где-то между 29k и 51k, но обрезан до логического числа
Я мог бы найти ответ, протестировав его.Как вы сказали, символ хранится в двух байтах.Таким образом, символ 29 Кбайт будет 58 Кбайт, а 51 Кбайт - 102 Кбайт.«Логический» предел будет 65536, так как он равен 2 ^ 16.таким образом, предел в char равен 2 ^ 16/2 или 2 ^ 15, что составляет 32768
. Я протестировал, чтобы поместить строки в мой string.xml (в основном длинную строку 'a')
<string name="length_test32000">(32 000 a)</string>
<string name="length_test32767">(32 767 a)</string>
<string name="length_test32768">(32 768 a)</string>
<string name="length_test32769">(32 769 a)</string>
<string name="length_test33000">(33 000 a)</string>
Затем я попытался записать их размер:
String test32k = getString(R.string.length_test32000);
String test32k767 = getString(R.string.length_test32767);
String test32k768 = getString(R.string.length_test32768);
String test32k769 = getString(R.string.length_test32769);
String test33k = getString(R.string.length_test33000);
Log.i("tag", "32000 : "+test32k.length());
Log.i("tag", "32767 : "+test32k767.length());
Log.i("tag", "32768 : "+test32k768.length());
Log.i("tag", "32769 : "+test32k769.length());
Log.i("tag", "33000 : "+test33k.length());
Вот результаты:
I/tag: 32000 : 32000
I/tag: 32767 : 32767
I/tag: 32768 : 16
I/tag: 32769 : 16
I/tag: 33000 : 16
Начиная с 32768, он кажется усеченным, поэтому я регистрирую то, что было внутри
Log.i("tag", "32768 : "+test32k768.length() + " content : " + test32k768);
И результат:
I/tag: 32768 : 16 content : STRING_TOO_LARGE
Максимальный символ кажется равным 32767 (2 ^ 15 - 1) символов.Я не нашел ни одного официального документа, который бы сказал это, но это то, что я нашел во время тестирования