1.String概念:字符串一旦被创建就不可以更改
(1)A.==B:判断地址; A.equals(B):判断A,B的内容
(2).常用方法:
长度:str.length();
查看指定位置的字符:str.charAt(1);
查看字符所在的位置:str.indexOf("a");
将字符串变成字符数组:str.toCharArray();
以A开头(结尾):startWith("A"),endWith("A");
包含:A.contains("B");
获取子字符串:str.subString(int start, int end);
将A字符替换成B字符:str.subString("A","B");
去除字符串两边的空格:str.trim();
比较两个对象大小:A.compareTo(B)
(3).字符串与基本类型的不同之处:
String str1 = "hello";
String srr2 = "java";
当在此方法里直接:str1 = str2,则输出结果为:java java
如果在此方法里将str1,str2作为参数调用别的方法,在别的方法里写:str1 = str2,则输出结果为:hello java
分析:因为字符串一旦写出来就不可更改,str1,str2实质上保存的是字符串的地址。如果在本方法里直接str1 = str2,意味着将str2的地址赋值给str1,此时str1保存的也是str2一样的地址,这个地址同时指向java。但是如果将str1,str2作为参数,只是将str1,str2的引用(也可以认为是副本)作为参数传递过去,他们本身是没有任何变化的,而且别的方法里无论发生什么对他们都没有影响。这就是字符串区别于基本数据类型的特性。
2.String里的常见的实例:
(1).关键字(key)在一串字符串(str)中出现次数
int count = 0;
int index = 0;
while(index = str.indexOf(key,index) != -1){
count ++;
index += key.length();
}
(2).两个字符串(s1,s2)的最大子串
String longStr,shortStr;
longStr = s1.length() > s2.length()?s1:s2;
shortStr = s2.length() <= s1.length()?s2:s1;
for(int x = 0; x < shortStr.length(); x++){
for(int y = 0, z = shortStr.length() - x; z < shortStr.length() ; y++,z++ ){
String temp = shortStr.subString(y,z);
if(longStr.contains(temp))
return temp;
}
}
(3).将字符串(str)字符按自然顺序排序
char[] chars = str.toCharArray();
Arrays.sort(chars);
return new String(chars);
3.StringBuffer:字符串缓冲区(字符容器)
(1).使用场景:有多种数据类型,但是最后都要变成字符串类型
局限性:无论原本是什么类型,一旦用了StringBuffer,就不可单独操作,且最后一定是变成字符串。
(2).常用方法:
创建缓冲区对象:StringBuffer sb = new StringBuffer();
新增:sb.append("aaa"); //在最后加
sb.insert(1,"aaa"); //指定位置加
删除:sb.delete(1,5); //包含头不包含尾
修改:sb.replace(1,5,"aaa"); //包含头不包含尾
设置长度:sb.setLength(20);
字符串倒序:sb.reverse();
(3).StringBuffer一般情况下与StringBuilder一样。StringBuffer是线程同步,StringBuilder线程不同步。但是StringBuilder速度更快。
4.基本数据类型的对象包装
(1).基本数据类型对应的包装对象
byte--Byte short--Short int--Integer long--Long
float--Float double--Double boolean--Boolean char--Character
(2).与字符串的互相转换
基本数据类型转成字符串:toString();
字符串转成基本数据类型(以int举例):Integer.parseInt(str);
(3).现在的jdk支持自动装箱拆箱,具体实现2种方法:
^1.Integer i = new Integer(4); //构造方法
^2.Integer.valueOf(4); //静态方法
(4).Integer的一个注意点:
Integer m = 127,n = 127;
== > m == n, m.equals(n)
Integer m = 128, n = 128;
== > m != n , m.equals(n)
所以,127是个临界值