重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
建议先写一个定字长的字符串,比如XXXXXXXXXX,然后通过通过字符串替换函数replaceAll(),来将X替换成你需要的那个字符就行了
创新互联专注于二道江网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供二道江营销型网站建设,二道江网站制作、二道江网页设计、二道江网站官网定制、成都微信小程序服务,打造二道江网络公司原创品牌,更为您提供二道江网站排名全网营销落地服务。
String内部是以char数组的形式存储,数组的长度是int类型,那么String允许的最大长度就是Integer.MAX_VALUE = 2^31 - 1 = 2147483647。又由于java中的字符是以16位存储的,因此大概需要4GB的内存才能存储最大长度的字符串。
不过这仅仅是对字符串变量而言,如果是字符串常量,如“abc”、”1234”之类写在代码中的字符串str,那么允许的最大长度取决于字符串在常量池中的存储大小,也就是字符串在class格式文件中的存储格式:
CONSTANT_Utf8_info {
u1 tag;
u2 length;
u1 bytes[length];
}
u2是无符号的16位整数,因此理论上允许的string str的最大长度是2^16-1=65535。然而实际测试表明,允许的最大长度仅为65534,超过就编译错误。
一、sql语句字符串长度太长导致的报错代码
代码A:
String str = "567890123456789...0123456789";//由于字符串长度太长,所以省略一部分,长度是65535;
System.out.println(str.length()); //编译报错:Error:(14, 22) java: 常量字符串过长。
代码B:
String str = "67890123456789...0123456789";//由于字符串长度太长,所以省略一部分,长度是65534;
System.out.println(str.length()); //编译通过,运行结果为:65534。
代码C:
String str = "67890123456789...0123456789";//由于字符串长度太长,所以省略一部分,长度是65534;
str = "5" + str;
System.out.println(str.length()); //编译通过,运行结果为:65535。
参考资料
庄周梦蝶.博客[引用时间2018-1-22]
简单实现代码如下:
public
class
stringlength
{
/**
*
获取字符串的长度,如果有中文,则每个中文字符计为2位
*
@param
value
指定的字符串
*
@return
字符串的长度
*/
public
static
int
length(string
value)
{
int
valuelength
=
0;
string
chinese
=
"[\u0391-\uffe5]";
/*
获取字段值的长度,如果含中文字符,则每个中文字符长度为2,否则为1
*/
for
(int
i
=
0;
i
value.length();
i++)
{
/*
获取一个字符
*/
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,两头的字母包括在内(范围)
[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](减去)
预定义字符类
. 任何字符(与行结束符可能匹配也可能不匹配)
\d 数字:[0-9]
\D 非数字: [^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 +"个"+matcher.group());
index++;
}
}
System.out.println("一共找到"+(index-1)+"组匹配项");
}
public static void main(String[] args) {
new RecE().getMatchedPattern("love","ilove12what i love23e tolove dolove a efe");
}
}
结果:
找到第2个love
找到第3个love
找到第4个love
一共找到4组匹配项