我正在尝试来自Sphere Online Judge(SPOJ)的The Next Palindrome问题,在那里我需要找到一个高达一百万位数的整数的回文。我想过使用Java的函数来反转字符串,但是它们会允许字符串变长吗?Java String有多少个字符?
回答
你应该能够得到长Integer.MAX_VALUE的字符串(总是2147483647(2 - 由Java规范1),数组,字符串类使用内部存储的最大尺寸),或者你一半最大堆大小(因为每个字符都是两个字节),以较小者为准。
...或您的最大堆大小除以2 ...因为字符是2个字节 – ChssPly76 2009-07-24 20:29:37
@ ChssPly76:是的,这是正确的。我编辑了我的答案,谢谢。 – 2009-07-24 20:31:51
如何找出最大堆大小?另外,我不知道使用哪个java虚拟机来判断我的问题是Integer.MAX_VALUE是否依赖于JVM规范的一部分? – andandandand 2009-07-24 20:40:43
我相信他们可以达到2^31-1的字符,因为它们是由一个内部数组保持,并且阵列由在Java中的整数索引。
内部实现是无关紧要的 - 例如,没有理由为什么字符数据不能存储在一个long数组中。问题是接口使用整数长度。如果你尝试一个非常大的字符串,'getBytes'和类似可能会有问题。 – 2009-07-24 20:45:59
这是真的 - 我暗示了这个事实。我的错。 – aperkins 2009-07-24 20:49:53
Integer.MAX_VALUE的是字符串的最大尺寸+取决于你的内存大小,但对球的判断网上的问题,你不必使用这些功能
你有没有使用BigDecimal
代替String
握住你的号码被认为?
这取决于应用程序将如何处理数字。如果它只是做文本的事情,如发现回文,计数(十进制)数字,那么字符串更好。如果要进行算术运算,BigDecimal(或BigInteger)更好。 – 2009-07-25 00:54:35
问题是“对于每个K,输出大于K的最小回文。” (其中K是给定的数字)。输出第一个小于K的回文会非常简单。您需要用算术找到比K更大的回文。示例:查找大于999999999999的下一个回文,或大于12922的下一个回文。 – 2009-07-25 06:48:18
我的朋友们,堆部分变得更糟。 UTF-16不能保证被限制到16位,可以扩展到32
除Java的'char'类型为16位,所以UTF-16使用的位数并不重要...... – awksp 2014-07-09 19:23:45
如果你使用谷歌的App Engine,com.google.appengine.api.datastore.Text可以提供帮助。它允许一个字符串存储高达1兆字节。
字符串已经可以存储高达2GB,所以一个可以存储高达1MB的类在这里没有帮助。 – 2015-07-28 16:17:57
如果你包含一个链接到一个网页,这将更详细地解释这个链接,并且在你的回答 – 2015-12-10 17:52:26
虽然你可以在理论上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
注意:在Java中9,字符串将使用字节[],这将意味着,多字节的字符将使用一个以上的字节并减少最大进一步。如果你有全部四个字节的代码点,例如表情符号,你将只能得到大约500万字
[Compact Strings](http://openjdk.java.net/jeps/254)在Java 9中扩展使用Latin-1或UTF-16编码。没有可变长度编码,即没有三字节字符。 – apangin 2016-12-08 07:49:03
@apangin“使用UTF-8等替代编码不是目标”谢谢你的纠正。 – 2016-12-08 08:05:22
Java9使用字节[]存储String.value,所以你只能得到大约1GB的字符串中Java9。另一方面,Java8可以有2GB的字符串。
通过角色,我的意思是“字符” S,一些字符不是在BMP所能表述的(像一些表情符号),因此将需要更多的(目前2)字符。
- 1. Java中有多少个字符
- 2. 在一个字符串中有多少次子字符串[Java]
- 3. 创建多少个Java字符串?
- 4. 计算两个字符串有多少个重复字符
- 5. 在字符串中创建多少个实例str1 = new String(“abc”)?
- 6. 多少个String对象..?
- 7. 控制台中有多少个字符?
- 8. varchar(max)中有多少个字符
- 9. 统计DIV中有多少个字符
- 10. nvarchar中有多少个字符(MAX)
- 11. 多少个字符的NSString有
- 12. 字符串有多少个参数
- 13. Java中有多少个字符串对象?
- 14. 两个字符串中有多少个字符相同
- 15. 计算多少个字符
- 16. JSON字符串为Java String
- 17. 有多少个字符可以放入C++字符串中?
- 18. 试图打印输入字符串中有多少个字符
- 19. C++中的字符串类有多少个字符?
- 20. 计算字符串中有多少个特定字符
- 21. 搜索C字符串中有多少个字符
- 22. 有多少有效的utf8字符?
- 23. 确定一个字符串中有多少个数字
- 24. Java - 计算在另一个字符串中显示多少个字符
- 25. 检查字符串出现了多少次在String []
- 26. MIPS:检查一个字符串中有多少个字母字符
- 27. 将为String创建多少个对象?
- 28. 一个字符串需要多少个字节?字符?
- 29. 有一个String []由其他字符串[]
- 30. Java - 多少个数字的组合
你是说你需要编写一个生成回文的函数,它的大小是用户指定的,可以长达100万个字符? – Robert 2009-07-24 20:29:47
*问题*(来自SPOJ)可能包含一个100G字节的文件,并且您希望一次将其加载到一个字符串中?认真...请使用扫描仪!的 – 2015-02-17 14:11:05
可能的复制[字符串的在Java中的最大长度 - 调用length()方法(https://stackoverflow.com/questions/816142/strings-maximum-length-in-java-calling-length-method) – Bergi 2017-06-16 05:55:18