#1 楼
您应该能够得到长度为Integer.MAX_VALUE
的字符串,始终为2,147,483,647(231-1)(由Java规范定义,即数组的最大大小,字符串类用于内部存储)
或
Half your maximum heap size
(因为每个字符为两个字节),以较小者为准。评论
...或您的最大堆大小除以2 ...,因为字符为2个字节
–ChssPly76
09年7月24日在20:29
@ ChssPly76:是的,这是正确的。我编辑了答案,谢谢。
–比尔蜥蜴
09年7月24日在20:31
Integer.MAX_VALUE始终为2147483647(2 ^ 31-1),这是Java规范的一部分。
–cd1
09年7月24日在20:45
假设使用64位JVM,因为您需要8GB的虚拟内存来存储该长度的字符串。
–罗伯特·弗雷泽(Robert Fraser)
09年7月24日在20:59
Java 9将对每个仅具有iso-latin-1内容的字符串使用每个字符一个字节,因此此类字符串可以具有与堆中的字节数相同的字符(或最大数组长度,以较小者为准),而在另一方面另一方面,由于非拉丁字符串在数组中使用两个字节,因此在Java 9中,它们的最大字符串长度将减半,仅支持1073741823个字符。
–霍尔格
17年7月14日在15:35
#2 楼
我相信它们最多可以包含2 ^ 31-1个字符,因为它们由内部数组保存,并且数组在Java中由整数索引。评论
内部实现无关紧要-例如,没有理由不能将字符数据存储在long类型数组中。问题是接口使用整数作为长度。如果尝试很大的字符串,则getBytes和类似内容可能会出现问题。
– Tom Hawtin-大头钉
09年7月24日在20:45
没错-我是在暗示这个事实。我的错。
– aperkins
09年7月24日在20:49
#3 楼
从理论上讲,您可以使用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);
}
}
}
注意:在Java 9中,字符串将使用byte [],这意味着多字节字符将使用多个字节,并进一步减少最大字节数。如果您具有所有四个字节的代码点,例如表情符号,您只会得到大约5亿个字符
评论
Java 9中的紧凑字符串使用Latin-1或UTF-16编码。没有可变长度编码,即没有三个字节字符。
– Apangin
16 Dec 8'在7:49
@apangin“使用诸如UTF-8之类的替代编码不是目标”,感谢您的纠正。
– Peter Lawrey
16 Dec 8'在8:05
#4 楼
您是否考虑过使用BigDecimal
而不是String
来保存您的电话号码?评论
这取决于应用程序将如何处理这些数字。如果只是做诸如查找回文,计算(十进制)数字之类的文本操作,那么String会更好。如果要进行算术运算,则最好使用BigDecimal(或BigInteger)。
– Stephen C
09年7月25日在0:54
问题是“对于每个K,输出比K大的最小回文。” (其中K是给定的数字)。输出第一个小于K的回文将很简单。您需要算术来找到一个大于K的回文。示例:找到大于999999999999的下一个回文,或大于12922的下一个回文。
–索比昂·拉文·安德森(ThorbjørnRavn Andersen)
09年7月25日在6:48
#5 楼
Integer.MAX_VALUE是字符串的最大大小+取决于您的内存大小,但是Sphere的在线问题认为您不必使用这些函数#6 楼
Java9使用byte []存储String.value,因此在Java9中只能获得大约1GB的字符串。另一方面,Java8可以有2GB的字符串。 )字符。评论
您是否可以附加Java-9参考,以将字符串大小从2 GB限制为1 GB
– Aditya Gupta
18年5月24日在6:07
#7 楼
我的朋友,堆的部分变得更糟。不保证将UTF-16限制为16位,并且可以扩展为32位评论
除了Java的char类型精确为16位之外,因此UTF-16使用的位数并不重要。
–awksp
2014年7月9日在19:23
@awksp:char是16位,但是字符串中的一个字符可以占用两个char(两个“代理”代码元素来表示UTF16中的一个字符)。但是,Q仅用于十进制数字,不仅是BMP,而且是8859-1 / block0和ASCII。
–dave_thompson_085
10月9日15:33
评论
您是在说要编写一个生成回文的函数,该函数的大小由用户指定,并且长度最多可以达到一百万个字符?问题(来自SPOJ)可能包含100G的文件,您想一次将其加载到字符串中吗?严重...请使用扫描仪!
Java中String的最大长度的可能重复-调用length()方法