一、String类的特性
String对象是不可变的,字符串一旦创建,就不可以改变。
二、构造字符串
字符串直接量
String a=new String("字符串直接量");
字符数组
String b=new String(chars);
字符串直接量赋值,java把字符串直接量看作String对象
String c="字符串直接量";
注意:String变量存储的是String对象的引用
三、不可变字符串与限定字符串
String对象是不可变的。
a的String对象保存在堆内存中,具有唯一的内存空间
c的String对象为限定字符串保存在JVM字符串驻留池中,多个相同的String对象共用一个内存空间
例如:
a=="字符串直接量"; // fase
c=="字符串直接量"; //true
获得字符串的限定字符串的引用使用intern方法
String d=a.intern();
d==c; //true
四、字符串替换和分隔
repalce(char old,char new) String
repalceFirst(String old,String new) Strring
repalceAll(String old,String new) String
split(String delimiter) String[] //分割字符串
split(String delimiter,int limit) String[]
limit 参数控制模式应用的次数,因此影响所得数组的长度。
n > 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后一项将包含所有超出最后匹配的定界符。
n <0,那么模式将被应用尽可能多的次数,而且数组可以是任何长度。
n = 0,那么模式将被应用尽可能多的次数,数组可以是任何长度,并且结尾空字符串将被丢弃。
例如,字符串 "boo:and:foo" 使用这些参数可生成以下结果:
RegexLimit
结果
: 2 { "boo", "and:foo" }
: 5 { "boo", "and", "foo" }
: -2 { "boo", "and", "foo" }
o 5 { "b", "", ":and:f", "", "" }
o -2 { "b", "", ":and:f", "", "" }
o 0 { "b", "", ":and:f" }
Limit为-2,{ "b", "", ":and:f", "", "" } 第一个“”是因为两个o之间的空数据,第二个也是这个原因,最后一个是将"boo:and:foo"中最后空字符串也算进去的。
五、模式匹配、替换和分割
matchs(String regex) 与equals方法非常相似,判断子串是否匹配。
"javac".match("javac");
"javac".equals("javac");
结果都为true。
matchs更强大,可以匹配遵循一定规律的字符串。
比如:"javac myclass".match("javac.*"); //子串.*的意思是字符串后面紧跟0个或多个任意字符
\d表示单个数字字符,\d{3}表示3个数字字符
方法repalceAll、repalceFirst、split可以和正则表达式结合一起使用。
详细参考java之正则表达式
六、常用方法
length() 返回字符串长度
charAt(index) 返回指定位置的字符
concat() 与+功能相同,都是连接字符串返回新的字符串,效率比+高一些
toUpperCae() 返回转成大写的字符串
toLowerCase() 返回转成小写的字符串
trim() 返回去除前后两端空白字符的字符串
注意:""表示空字符串,并且"".length()为0
equals(s1) 判断是否相等
equalsIgnoreCase(s1) 判断是否相等不区分大小写
compareTo(s1) 比较大小,若大于返回大于0的整数,若小于返回小于0的数,等于返回0
compareToIgnoreCase(s1) 比较大小,若大于返回大于0的整数,若小于返回小于0的数,等于返回0,不区分大小写
startsWith(prefix) 字符串以指定的前缀开始,返回true
endsWith(suffix) 字符串以指定的后缀结束,返回true
contains(s1) s1字符串是否该串的子串
警告:字符串不能像c++一样使用<,>,<=,>=来比较。
注意:equals方法返回是boolean类型,compareTo方法返回int类型
substring(beginIndex) 返回子串
substring(beginIndex,endIndex) 返回子串
indexOf(ch/s) 返回第一个出现ch/s的下标 ch/s意思是char或者String类型的变量
indexOf(ch/s,fromIndex) 返回在fromIndex之后第一个出现ch/s的下标
lastIndexOf(ch/s) 返回最后一个出现ch/s的下标
LastIndexOf(ch/s,fromIndex) 返回在fromIndex之前最后一个出现ch/s的下标
以上返回下标的函数,如果没有找到这返回-1。
七、字符串与数值的转换(数值型的封装类具有字符串转数值的函数)
Integer.parseInt(s)Double.parseDouble(s)Byte.parseByte(s)Long.parseLong(s)
八、数值或者字符转字符串
1)String s=number+"";2)对应的封装类的toString方法调用
3)String.valueOf(value)方法
九、格式化字符串
String.fomat(format,value0,...);
%d 布尔值
%c 字符
%d 十进制整数
%x 十六进制整数
%f 浮点数
%e 科学记数法形式的数
%s 字符串
%5c 输出字符并在前面加四个空格
%10.2f 输出浮点数条目的宽度至少为10,包括小数点和小数点后两位数字
%10.2e 输出浮点数条目的宽度至少为10,包括小数点和小数点后两位数字和指数部分
%12s 字符串宽度至少为12个字符,如果字符串长度少于12个字符,则前面补空格。如果多于12个字符,则自动增长
%-5c 输出字符并在后面加四个空格,即左对齐
例如:String c= String.fomat("c=%d",9); //c为字符串c=9
十、字符串与字符数组
String a = new String(new char[]{'a','b','c'});
char[] c = a.toCharArray();
十一、StringBuilder与StringBuffer
StringBuilder与StringBuffer是可变类。如果频繁修改内容,StringBuilder与StringBuffer比String的效率高
StringBuffer是线程安全的
StringBuilder与StringBuffer的常用方法append、delete、insert、replace、reverse、setCharAt、length、substring。
详细查阅java之StringBuilder与StringBuffer