黑马程序员-String类和StringBuffer

来源:互联网 发布:忘尘娇喘 网络歌手 编辑:程序博客网 时间:2024/04/30 23:16
------- android培训、java培训、期待与您交流! ----------
String类代表字符串。字符串类型是引用型数据类型。
字符串一旦被初始化就不可以被改变。
String类复写了Object类中的equals方法,用来判断字符串是否相同。


String s1 = "abc";//内存中有一个对象,先看常量池中是否有“abc”对象,有就直接引用,没有就新创建一个。
String s2 = new String("abc");//内存中有两个对象


字符串常见操作:
1.获取:
(1)length():字符串长度,是字符串方法,数组的length是数组属性。
(2)charAt():按照指定索引查找字符
(3)indexOf(String str ,int fromindex):返回指定字符在此字符串中第一次出现处的索引。
(4)lastIndexOf(String str,int fromindex ):返回指定字符串在此字符串中最后一次出现处的索引。
2.判断:
(1)contains(String str):字符串是否包含子串
注意:indexOf(str):可以索引str第一次出现的位置,如果返回-1,表示str不存在。也可以判断是否包含。
(2)isEmpty():判断字符串是否为空
(3)startsWith(String str):字符串是否以指定内容开头
(4)endsWith(String str):字符串是否以指定内容结尾
(5)equals(String str):判断两个字符串内容是否相同
(6)equalsIgnoreCase(String str):判断两个字符串内容是否相同,忽略大小写。
3.转换:
(1)将字符数组转成字符串:String s = new String(char[] chs);'
静态方法:static String copyValueOf(char[] chs);
(2)将字符串转成字符数组:char[] chs = str.toCharArray();
(3)将字节数组转成字符串:String s = new String(byte[] bytes);
(4)将字符串转成字节数组:byte[] buf = str.getBytes();
注意:字符串和字节数组在转换过程中,可以指定编码表。
(5)将基本数据类型转成字符串:static valueOf()
4.替换:
String replace(char oldChar,char newChar):替换字符串中的指定字符,如果字符串中没有要替换的字符,返回原字符串。
replaceFirst(String regex,String replacement):使用给定的replacement替换此字符串所有匹配给定的正则表达式的第一个子字符串。
5.切割:
String[] split(regex):按照指定正则表达式切割字符串
6.子串:获取字符串中的一部分
String substring(begin,end);包含头不包含尾
7.转换,去除空格,比较
String toUpperCase();toLowerCase();把字符串转换大小写
String trim():把字符串两端的多个空格去除
int compareTo(String):对两个字符串进行自然顺序的比较,返回的是字符的ASCII码值的相减值。

//trim()方法实现:public String trim(String str){int start = 0;int end = str.length()-1;while(start<=end && str.charAt(start)==' ')start++;while(start<=end && str.charAt(end)==' ')end--;return str.substring(start,end+1);}//reverse()方法实现:public String reverse(String str){String restr = "";for(int x=str.length()-1;x>=0;x--){restr += str.charAt(x);}return restr;}



在字符串中获取指定字符串出现的次数
public int getCount(String str,String key){int count = 0;int index = 0;while((index=str.indexOf(key,index))!=-1){index = index + key.length();count++;}return count;}

求两个字符串最大相同子串:
public String getMaxSubstring(String s1,String s2){String minStr = (s1.length()>=s2.length())?s2:s1;String maxStr;if(minStr==s1)maxStr = s2;elsemaxStr = s1;for(int x=0;x<minStr.length();x++){for(int y=0,z=minStr.length()-x;z!=minStr.length()+1;y++,z++){String temp = minStr.substring(y,z);if(maxStr.contains(temp))return temp;}}return "";}

StringBuffer是字符串缓冲区,是一个容器。
特点:1.长度可变化
 2.可以操作多个数据类型
 3.可以通过toString方法变成字符串

CURD:create update read delete
StringBuffer sb =  new StringBuffer();
1.存储
sb.append(str);添加(除去byte short的所有基本数据类型);
sb.insert(index,str):在指定位置插入数据
2.删除
sb.delete(int start,int end):删除缓冲区中的子字符串
sb.deleteCharAt(int index):移除指定位置的char
3.获取
sb.charAt();
sb.indexOf();
sb.lastIndexOf();
sb.substring(int start,int end)
4.替代
sb.replace(int start,int end,String str):使用给定String中的字符替换指定子字符串。
sb.setCharAt(int index,char ch):将指定索引处的字符设置为新的字符。
sb.reverse():反转
5.sb.length():存储字符的长度
  sb.capacity():容器的大小
  注意:StringBuffer的默认容量是16,如果当前存储字符窜长度超过容量,会自动分配一个新的容量
  新容量等于旧容量的两倍加2.



StringBuilder:jdk1.5开始,和StringBuffer基本相同
区别:
StringBuffer:线程同步的
StringBuilder:线程不同步的,单线程中建议使用StringBuilder 如果在多线程中,建议使用StringBuffer。



jdk升级三个因素:
1.提高效率
2.简化书写
3.提高安全性


基本数据类型包装类:
byte Byte
short Short
int  Integer
long Long
boolean Boolean
float Float
double Double
char  Character


基本数据类型转成字符串:基本数据类型+""
字符串转成基本数据类型:
基本数据类型对象.parse+基本数据首字母大写();
xxx.parseXxx(String str);
Integer.parseInt(String str);


进制转换:
十进制转换成其他进制
Integer.toBinaryString();
Integer.toHexString();
Integer.toOctalString();
其他进制转成十进制
Integer.parseInt(String str,int radix)




jdk1.5新特性:自动装箱与拆箱
Integer x = 4;//自动装箱
x = x + 2;//先自动拆箱,运行后再自动装箱


Integer a = 127;
Integer b = 127;
System.out.println(a==b);
在新特性中,当数值在byte范围内,如果在内存中已经存在该数值的对象,不会开辟新空间,因为a和b指向同一个对象。


原创粉丝点击