⑴ java中String类型有没有长度的限制
严格来说,String确实有长度限制。
1、String内部使用一个char[]数组来存放字符串的内容,数组下标是整型(也可以参考String的构造方法String(char value[], int offset, int count) ,可以知道字符数量是用整型表示),整型(Java规定32位)表示范围是2G,也就是说,Java数组最大的长度是2G,即字符串不能超过2G个字符。
2、Java的数组大小还有没有别的限制?事实上数组大小不能超过Java堆的大小,而Java堆的最大尺寸可以通过启动参数指定,如果Java堆开得足够大,数组的最大长度是可以不断增大的。
3、所以,理论上,字符串不能超过2G个字符,少于2G个字符都有可能。
⑵ java string 最大长度是多少
最大长度是Integer.MAX_VALUE的值,一般是2的31次方-1个长度
⑶ Java中String接受的最大字符串的长度是多少
数组最大的长度为Integer.MAX_VALUE
⑷ java string最大长度
String内部是以char数组的形式存储,数组的长度是int类型,那么String允许的最大长度就是Integer.MAX_VALUE了。又由于java中的字符是以16位存储的,因此大概需要4GB的内存才能存储最大长度的字符串。不过这仅仅是对字符串变量而言,如果是字符串字面量(string literals),如“abc"、"1a2b"之类写在代码中的字符串literals,那么允许的最大长度取决于字符串在常量池中的存储大小,也就是字符串在class格式文件中的存储格式:
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
u2是无符号的16位整数,因此理论上允许的string literal的最大长度是2^16-1=65535。然而实际测试表明,允许的最大长度仅为65534,超过就编译错误了.
参考:http://www.blogjava.net/killme2008/archive/2009/01/15/251368.html
⑸ java中String类型有没有限制,最大限制是多少
严格来说,String确实有长度限制。
String内部使用一个char[]数组来存放字符串的内容,数组下标是整型(也可以参考String的构造方法String(char value[], int offset, int count) ,可以知道字符数量是用整型表示),整型(Java规定32位)表示范围是2G,也就是说,Java数组最大的长度是2G,即字符串不能超过2G个字符。
Java的数组大小还有没有别的限制?事实上数组大小不能超过Java堆的大小,而Java堆的最大尺寸可以通过启动参数指定,如果Java堆开得足够大,数组的最大长度是可以不断增大的。
所以,理论上,字符串不能超过2G个字符,少于2G个字符都有可能。
但编码时有需要注意的地方,采用明文的方式,如果超过65534个字节,可能报编译错误,可参考下列网站(有一处错误,整型考虑到符号位,最大只到2G)。
⑹ Java中String接受的最大字符串的长度是多少
我们可以使用串接操作符得到一个长度更长的字符串,那么,string对象最多能容纳多少字符呢?查看string的源代码我们可以得知类string中
是使用域
count
来记录对象字符的数量,而count
的类型为
int,因此,我们可以推测最长的长度为
2^32,也就是4g。
不过,我们在编写源代码的时候,如果使用
sting
str
=
"aaaa";的形式定义一个字符串,那么双引号里面的ascii字符最多只能
有
65534
个。为什么呢?因为在class文件的规范中,
constant_utf8_info表中使用一个16位的无符号整数来记录字符串的长
度的,最多能表示
65536个字节,而java
class
文件是使用一种变体utf-8格式来存放字符的,null值使用两个字节来表示,因此只剩
下
65536-
2
=
65534个字节。也正是变体utf-8的原因,如果字符串中含有中文等非ascii字符,那么双引号中字符的数量会更少(一
个中文字符占用三个字节)。如果超出这个数量,在编译的时候编译器会报错
⑺ java 实现 一个字符串中不重复最长子串
/**注意:如果一个函数有多个长度相等的不重复子串,本函数只能得到其中的第一个子串,
*如果要输出所有子串,稍作修改即可
*/
publicstaticStringnoDuplicate(Strings){
/**
*这个函数返回给定字符串中最长不重复子串采用类似纸牌游戏拖板车的思维
*/
Stringresult="";//记录最终结果,即最长子串
Stringsub="";//记录当前纸牌串
for(inti=1;i<s.length();i++){//一张张发牌
Stringc=""+s.charAt(i);//当前新发下来的牌
if(!sub.contains(c)){//如果当前纸牌串中不包含新发的牌
sub+=c;//将新牌加入当前纸牌串
}else{//如果当前纸牌串中包含新发的牌
if(result.length()<sub.length()){//如果当前子串比最优记录长
result=sub;//更新最优记录
}
String[]temp=sub.split(c);//将子串按当前牌分割为两部分
sub=temp[1];//取后一部分作新的当前纸牌串,丢弃重复牌及其前面部分
sub+=c;//将新牌加入当前纸牌串
}
}
//比较最后一个当前纸牌串与最优记录
if(result.length()<sub.length()){//如果当前子串比最优记录长
result=sub;//更新最优记录
}
returnresult;
}
⑻ Java中String接受的最大字符串的长度是多少
数组最大的长度为Integer.MAX_VALUE
1.不过,我们在编写源代码的时候,如果使用
Sting
str
=
"aaaa";的形式定义一个字符串,那么双引号里面的ASCII字符最多只能有
65534
个。
2.因为在class文件的规范中,
CONSTANT_Utf8_info表中使用一个16位的无符号整数来记录字符串的长度的,最多能表示
65536个字节,而java
class
文件是使用一种变体UTF-8格式来存放字符的,null值使用两个字节来表示,因此只剩下
65536-
2
=
65534个字节。
3.也正是变体UTF-8的原因,如果字符串中含有中文等非ASCII字符,那么双引号中字符的数量会更少(一个中文字符占用三个字节)。如果超出这个数量,在编译的时候编译器会报错。
⑼ java如何获取字符串中最长字符串
先划分成许多个没有字符的字符串,然后选择其中长度最长的即可。
⑽ java 实现 一个字符串中不重复最长子串
这个函数的目的是求最长不重复子串,所谓不重复子串是指由某个字符串中相邻的N个字符组成,这个N内所有字符都是不重复的,最长是指这个N最大。如字符串"abcdefghiud",最长的不重复的子串为"abcdefghiu"
cursor里面存放字符的在字符串中的位置
lengAt[i]存放以字符string.charAt(i)结尾的最长子字符串的长度
max的目的就是确定这个最长,因为最开始可能找到的子串比以后找到的子串短,所以用max比较