java-string-api

首先,字符串的操作是计算机程序设计中最常见的行为。
####一、String(不可变对象)
提到字符串,就必定会想到String关键字,但String不是java的八大基本类型之一。至于它的特性,只读性,下面我们来看一段代码:

String str = "abcdefg";
System.out.println(str);
str = "1234567";
System.out.println(str);

打印结果为:
s = abcdefg
s = 1234567

很多人看到这里,很惊讶,内心表示mmp,你讹我呢,这不是改变了吗?还只读个鬼。
其实,真相是, str只是一个String对象的引用,并不是对象本身。对象在内存中是一块内存区,成员变量越多,这块内存区占的空间越大。引用只是一个4字节的数据,里面存放了它所指向的对象的地址,通过这个地址可以访问对象。
String
所以,String对象是不可变的,你可以给一个String对象加任意多的别名,因为String对象具有只读性,所以指向它的任何引用都不可能改变它的值,因此,也就不会对其他的引用有什么影响。

字符串基本操作:
1、substring(from,end)(含头不含尾)——截取

String str = "123456789";
System.out.println(str.substring(0, 5));
System.out.println(str.substring(4));
System.out.println(str.substring(4, 8));
结果:
12345
56789
5678

2、“装箱类型”.valueOf()——强制转换为别的类型

String str = "123456789";
System.out.println(Integer.valueOf(str));
System.out.println(Double.valueOf(str));
System.out.println(Boolean.valueOf(str));
结果:
123456789
1.23456789E8
false

3、trim()——去除字符串开头和结尾的空字符(空格,tab等)

System.out.println(" 12345 6789 ".trim());
结果:
12345 6789

4、charAt()——返回字符串该下标的字符

System.out.println("123456789".charAt(2));
结果:
3

5、split()——根据特定规则切割字符串

System.out.println(Arrays.toString("12 345 6789".split(" ")));
结果:
[12, 345, 6789]

6、startsWith(str)和endswidth(str)——判断字符串是否是以参数str指定的内容开始/结束

System.out.println("app1.1.0.apk".startsWith("app"));
System.out.println("app1.1.0.apk".startsWith("ap1"));
System.out.println("app1.1.0.apk".endsWith("apk"));
结果:
true
false
true

7、toUpperCase()和toLowerCase()——统一转换为大写或者是小写

8、toString()和valueOf()的区别
xx对象.toString():必须先创建对象,再调用对象的toString()方法
String.valueOf(XX对象):静态方法,不需要创建任何对象,就可以直接调用

People people = null;
//        System.out.println(people.toString());  //报错
String peopleStr = String.valueOf(people);
System.out.println(peopleStr);
结果:
null

9、toCharArray()和String()——字符串与字符数组之间的转换

char c[] = "123456789".toCharArray();
for(char a : c) {
    System.out.print(a +",");
}
System.out.println();
System.out.println(new String(c));
System.out.println(new String(c, 0, 4));
结果:
1,2,3,4,5,6,7,8,9,
123456789
1234

10、equals(Object anObject)——将此字符串与指定的对象比较

11、length()——获取字符串长度

12、isEmpty()——判断字符串是否为空

13、replace()——替换字符串

System.out.println("1233333".replace("3", "a"));
System.out.println("1233223".replace("3", "abc"));
System.out.println("1233223".replace("33", "abc"));
结果:
12aaaaa
12abcabc22abc
12abc223

14、indexOf()——返回指定字符(字符串)索引

System.out.println("123411741".indexOf("1"));
System.out.println("123411741".lastIndexOf("1"));
System.out.println("123411741".indexOf("1",2));
System.out.println("123411741".indexOf("41"));
System.out.println("123411741".lastIndexOf("41"));
结果:
0
8
4
3
7

####二、String,StringBuilder,StringBuffer三者的区别
说完String,其实还有另外两个关键字定义字符串的,方法都跟String差不多,我们来说一下它们的区别吧。
要说它们的区别,那就从速度说起,上面已经说了,因为String是不可变的特性,所以他的速度是最慢的;然后StringBuilder是线程不安全的,而StringBuffer是线程安全的,所以他们的速度排名顺序为:

StringBuilder > StringBuffer > String

当然,选择用什么不是完全根据速度来选择的,具体的选择我们可以根据实际情况来选择。

String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况

猜你喜欢

转载自blog.csdn.net/zhangjian8641/article/details/81057687