建議先寫一個(gè)定字長的字符串,比如XXXXXXXXXX,然后通過通過字符串替換函數(shù)replaceAll(),來將X替換成你需要的那個(gè)字符就行了
創(chuàng)新互聯(lián)專注于二道江網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供二道江營銷型網(wǎng)站建設(shè),二道江網(wǎng)站制作、二道江網(wǎng)頁設(shè)計(jì)、二道江網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造二道江網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供二道江網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
String內(nèi)部是以char數(shù)組的形式存儲(chǔ),數(shù)組的長度是int類型,那么String允許的最大長度就是Integer.MAX_VALUE = 2^31 - 1 = 2147483647。又由于java中的字符是以16位存儲(chǔ)的,因此大概需要4GB的內(nèi)存才能存儲(chǔ)最大長度的字符串。
不過這僅僅是對字符串變量而言,如果是字符串常量,如“abc”、”1234”之類寫在代碼中的字符串str,那么允許的最大長度取決于字符串在常量池中的存儲(chǔ)大小,也就是字符串在class格式文件中的存儲(chǔ)格式:
CONSTANT_Utf8_info {
u1 ?tag;
u2 ?length;
u1 ?bytes[length];
}
u2是無符號(hào)的16位整數(shù),因此理論上允許的string str的最大長度是2^16-1=65535。然而實(shí)際測試表明,允許的最大長度僅為65534,超過就編譯錯(cuò)誤。
一、sql語句字符串長度太長導(dǎo)致的報(bào)錯(cuò)代碼
代碼A:
String str = "567890123456789...0123456789";//由于字符串長度太長,所以省略一部分,長度是65535;
System.out.println(str.length()); ? //編譯報(bào)錯(cuò):Error:(14, 22) java: 常量字符串過長。
代碼B:
String str = "67890123456789...0123456789";//由于字符串長度太長,所以省略一部分,長度是65534;
System.out.println(str.length()); ? //編譯通過,運(yùn)行結(jié)果為:65534。
代碼C:
String str = "67890123456789...0123456789";//由于字符串長度太長,所以省略一部分,長度是65534;
str = "5" + str;
System.out.println(str.length()); ? //編譯通過,運(yùn)行結(jié)果為:65535。
參考資料
莊周夢蝶.博客[引用時(shí)間2018-1-22]
簡單實(shí)現(xiàn)代碼如下:
public
class
stringlength
{
/**
*
獲取字符串的長度,如果有中文,則每個(gè)中文字符計(jì)為2位
*
@param
value
指定的字符串
*
@return
字符串的長度
*/
public
static
int
length(string
value)
{
int
valuelength
=
0;
string
chinese
=
"[\u0391-\uffe5]";
/*
獲取字段值的長度,如果含中文字符,則每個(gè)中文字符長度為2,否則為1
*/
for
(int
i
=
0;
i
value.length();
i++)
{
/*
獲取一個(gè)字符
*/
string
temp
=
value.substring(i,
i
+
1);
/*
判斷是否為中文字符
*/
if
(temp.matches(chinese))
{
/*
中文字符長度為2
*/
valuelength
+=
2;
}
else
{
/*
其他字符長度為1
*/
valuelength
+=
1;
}
}
return
valuelength;
}
public
static
void
main(string
args[]){
string
str
=
"hello你好";
system.out.println(stringlength.length(str));
}
}
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RecE {
Pattern pattern;
Matcher matcher;
/* ps:
字符類
[abc] a、b 或 c(簡單類)
[^abc] 任何字符,除了 a、b 或 c(否定)
[a-zA-Z] a 到 z 或 A 到 Z,兩頭的字母包括在內(nèi)(范圍)
[a-d[m-p]] a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z[def]] d、e 或 f(交集)
[a-z[^bc]] a 到 z,除了 b 和 c:[ad-z](減去)
[a-z[^m-p]] a 到 z,而非 m 到 p:[a-lq-z](減去)
預(yù)定義字符類
. 任何字符(與行結(jié)束符可能匹配也可能不匹配)
\d 數(shù)字:[0-9]
\D 非數(shù)字: [^0-9]
\s 空白字符:[ \t\n\x0B\f\r]
\S 非空白字符:[^\s]
\w 單詞字符:[a-zA-Z_0-9]
\W 非單詞字符:[^\w]
*/
public void getMatchedPattern(String regx,String source){
pattern = Pattern.compile(regx);
matcher = pattern.matcher(source);
int index = 1;
while(!matcher.hitEnd()){
if(matcher.find()){
System.out.println("找到第"+index +"個(gè)"+matcher.group());
index++;
}
}
System.out.println("一共找到"+(index-1)+"組匹配項(xiàng)");
}
public static void main(String[] args) {
new RecE().getMatchedPattern("love","ilove12what i love23e tolove dolove a efe");
}
}
結(jié)果:
找到第2個(gè)love
找到第3個(gè)love
找到第4個(gè)love
一共找到4組匹配項(xiàng)