⑴ 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比較