字符串大小超过了整型的最大限制

4

我有一个包含大量字符串的集合,我想找到每个字符串的长度并将其相加,然后显示字符串的总长度。

为了计算长度,我使用string.length()方法,但我注意到length()的数据类型是int,而int的最大大小为2,147,483,647。然而我的字符串对象具有超过2,147,483,647的字符。您有什么建议在长度超过int限制时如何获取长度?


你的字符串存储在哪里? - Mark Byers
仅出于好奇:哪些字符串对象的字符数超过2^31?这足以写2000本500页、DIN A4格式的书了。 - Thorsten S.
3个回答

5
然而,我的字符串对象有超过2,147,483,647个字符。
我对此表示怀疑:字符串使用char[]来存储字符,但数组不能容纳超过Integer.MAX_VALUE个元素。请参见这篇文章
如果您只需要添加几个字符串的长度,则可以使用long变量。

2

你不能拥有超过这个长度的字符串。

Integer.MAX_VALUE是用于存储字符串对象的内部字符数组的索引上限,因此你无法拥有比它更长的字符串。


3
在Java中,整数类型的大小不会随着底层系统的变化而改变。 - Fabian Barney
@FabianBarney 我把它改成了JVM。JVM的位数确实很重要,不是吗? - Anirudh Ramanathan
这是一篇博客文章,描述了32位和64位JVM字符串存储的区别。http://lingpipe-blog.com/2010/06/22/the-unbearable-heaviness-jav-strings/ - Richard Chambers
2
不,Java和C#中的整数始终为32位。 - Fabian Barney
@FabianBarney和Richard Chambers,谢谢。我需要把我的基础打牢 :) - Anirudh Ramanathan

1
在Java中,没有字符串对象的长度可以大于 Integer.MAX_VALUE ,因此string.length适用于您,但是如果您想要将一组字符串的总长度大于 Integer.MAX_VALUE ,那么您可以使用long类型变量来存储整个字符串集的长度值。

无法理解您的第一句话。如果长度大于Integer.MAX_VALUE,为什么不会发生截断? - Rohit Jain
在Java中,您不能拥有长度大于Integer.MAX_VALUE的任何字符串。 - zaffargachal
没错。在这种情况下,你的回答完全没有意义。请更新它。 - Rohit Jain
我的回答是关于如何获取所有字符串的总长度。 - zaffargachal
@RohitJain,zaffar所说的有道理。由于Java字符串无法容纳超过Integer.MAX_VALUE个字符,但似乎OP喜欢处理这些大字符串,因此告诉他可以使用一堆字符串来计算长整型的总长度是有意义的。不想建议类似的事情,但在这种情况下这是有意义的。 - Fabian Barney
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接