您的位置:首页 > 产品设计 > UI/UE

(五)黑马程序员——Java中的字符串操作类(String、StringBuilder、StringBuffer)

2016-01-04 15:55 483 查看
-------<ahref="http://www.itheima.com"target="blank">android培训</a>、<ahref="http://www.itheima.com"target="blank">java培训</a>、期待与您交流!----------java语言的字符串序列是通过字符串类实现的。java提供了3个字符串类:String类、StringBuilder类和StringBuffer类。String类是不变字符串,StringBuffer类和StringBuilder类是可变字符串,这3种字符串都是16位的Unicode字符序列,并且这3个类都被声明为final类,因此不能被继承。

一、String

常见构造方法*publicString():空构造*publicString(byte[]bytes):把字节数组转成字符串*publicString(byte[]bytes,intindex,intlength):把字节数组的一部分转成字符串*publicString(char[]value):把字符数组转成字符串*publicString(char[]value,intindex,intcount):把字符数组的一部分转成字符串*publicString(Stringoriginal):把字符串常量值转成字符串判断功能*booleanequals(Objectobj):比较字符串的内容是否相同,区分大小写*booleanequalsIgnoreCase(Stringstr):比较字符串的内容是否相同,忽略大小写*booleancontains(Stringstr):判断大字符串中是否包含小字符串*booleanstartsWith(Stringstr):判断字符串是否以某个指定的字符串开头*booleanendsWith(Stringstr):判断字符串是否以某个指定的字符串结尾*booleanisEmpty():判断字符串是否为空。案例:
packagecom.heima.string;
publicclassDemo4_StringMethod{
publicstaticvoidmain(String[]args){
//demo1();
//demo2();
Strings1="heima";
Strings2="";
Strings3=null;
System.out.println(s1.isEmpty());
System.out.println(s2.isEmpty());
System.out.println(s3.isEmpty());//java.lang.NullPointerException
}
privatestaticvoiddemo2(){
Strings1="我爱heima,哈哈";
Strings2="heima";
Strings3="baima";
Strings4="我爱";
Strings5="哈哈";
System.out.println(s1.contains(s2));//判断是否包含传入的字符串
System.out.println(s1.contains(s3));
System.out.println("------------------");
System.out.println(s1.startsWith(s4));//判断是否以传入的字符串开头
System.out.println(s1.startsWith(s5));
System.out.println("------------------");
System.out.println(s1.endsWith(s4));//判断是否以传入的字符串结尾
System.out.println(s1.endsWith(s5));
}
privatestaticvoiddemo1(){
Strings1="heima";
Strings2="heima";
Strings3="HeiMa";
System.out.println(s1.equals(s2));//true
System.out.println(s2.equals(s3));//false
System.out.println("---------------");
System.out.println(s1.equalsIgnoreCase(s2));
System.out.println(s1.equalsIgnoreCase(s3));//不区分大小写
}
}
[/code]模拟用户登录*案例演示*需求:模拟登录,给三次机会,并提示还有几次。*用户名和密码都是admin
/**
**A:案例演示
*需求:模拟登录,给三次机会,并提示还有几次。
*用户名和密码都是admin
*@authorJX
*
*/
publicclassScannerTest{
publicstaticvoidmain(String[]args){
Scannersc=newScanner(System.in);
intcount=3;
while(true){
System.out.println("请输入用户名:");
StringuserName=sc.nextLine();
System.out.println("请输入密码:");
Stringpassword=sc.nextLine();
if("admin".equals(userName)&&"admin".equals(password)){
System.out.println("欢迎光临:"+userName);
break;
}else{
if(--count==0){
System.out.println("登录次数已到,请明天再来吧!");
break;
}else{
System.out.println("您还有"+(count)+"机会!");
}
}
}
}
}
[/code]String类的获取功能*intlength():获取字符串的长度。*charcharAt(intindex):获取指定索引位置的字符*intindexOf(intch):返回指定字符在此字符串中第一次出现处的索引。*intindexOf(Stringstr):返回指定字符串在此字符串中第一次出现处的索引。*intindexOf(intch,intfromIndex):返回指定字符在此字符串中从指定位置后第一次出现处的索引。*intindexOf(Stringstr,intfromIndex):返回指定字符串在此字符串中从指定位置后第一次出现处的索引。*lastIndexOf*Stringsubstring(intstart):从指定位置开始截取字符串,默认到末尾。*Stringsubstring(intstart,intend):从指定位置开始到指定位置结束截取字符串。案例:
packagecom.itheima.string;
publicclassDemo5_StringMethod{
publicstaticvoidmain(String[]args){
//demo1();
//demo2();
//demo3();
//demo4();
Strings="woaiheima";
s.substring(4);//subString会产生一个新额字符串,需要将新的字符串记录
System.out.println(s);
}
privatestaticvoiddemo4(){
Strings1="heimawudi";
Strings2=s1.substring(5);
System.out.println(s2);
Strings3=s1.substring(0,5);//包含头,不包含尾,左闭右开
System.out.println(s3);
}
privatestaticvoiddemo3(){
Strings1="woaiheima";
intindex1=s1.indexOf('a',3);//从指定位置开始向后找
System.out.println(index1);
intindex2=s1.lastIndexOf('a');//从后向前找,第一次出现的字符
System.out.println(index2);
intindex3=s1.lastIndexOf('a',7);//从指定位置向前找
System.out.println(index3);
}
privatestaticvoiddemo2(){
Strings1="heima";
intindex=s1.indexOf('e');//参数接收的是int类型的,传递char类型的会自动提升
System.out.println(index);
intindex2=s1.indexOf('z');//如果不存在返回就是-1
System.out.println(index2);
intindex3=s1.indexOf("ma");//获取字符串中第一个字符出现的位置
System.out.println(index3);
intindex4=s1.indexOf("ia");
System.out.println(index4);
}
privatestaticvoiddemo1(){
//int[]arr={11,22,33};
//System.out.println(arr.length);//数组中的length是属性
Strings1="heima";
System.out.println(s1.length());//length()是一个方法,获取的是每一个字符的个数
Strings2="你要减肥,造吗?";
System.out.println(s2.length());
charc=s2.charAt(5);//根据索引获取对应位置的字符
System.out.println(c);
charc2=s2.charAt(10);//StringIndexOutOfBoundsException字符串索引越界异常
System.out.println(c2);
}
}
[/code]String的转换功能:*byte[]getBytes():把字符串转换为字节数组。//字符串---.>字节数组*char[]toCharArray():把字符串转换为字符数组。//字符串--->字符数组*staticStringvalueOf(char[]chs):把字符数组转成字符串。//字符数组---->字符串*staticStringvalueOf(inti):把int类型的数据转成字符串。//valueOf可以把任意类型--->字符串*注意:String类的valueOf方法可以把任意类型的数据转成字符串。*StringtoLowerCase():把字符串转成小写。(了解)*StringtoUpperCase():把字符串转成大写。*Stringconcat(Stringstr):把字符串拼接。案例:
packagecom.itheima.string;
importcom.itheima.bean.Person;
publicclassDemo6_StringMethod{
publicstaticvoidmain(String[]args){
//demo1();
//demo2();
//demo3();
Strings1="heiMA";
Strings2="chengxuYUAN";
Strings3=s1.toLowerCase();
Strings4=s2.toUpperCase();
System.out.println(s3);
System.out.println(s4);
System.out.println(s3+s4);//用+拼接字符串更强大,可以用字符串与任意类型相加
System.out.println(s3.concat(s4));//concat方法调用的和传入的都必须是字符串
}
privatestaticvoiddemo3(){
char[]arr={'a','b','c'};
//底Strings=String.valueOf(arr);层是由String类的构造方法完成的
System.out.println(s);
Strings2=String.valueOf(100);//将100转换为字符串
System.out.println(s2+100);
Personp1=newPerson("张三",23);
System.out.println(p1);
Strings3=String.valueOf(p1);//调用的是对象的toString方法
System.out.println(s3);
}
privatestaticvoiddemo2(){
Strings="heima";
char[]arr=s.toCharArray();//将字符串转换为字符数组
for(inti=0;i<arr.length;i++){
System.out.print(arr[i]+"");
}
}
privatestaticvoiddemo1(){
Strings1="abc";
byte[]arr=s1.getBytes();
for(inti=0;i<arr.length;i++){
//System.out.print(arr[i]+"");
}
Strings2="你好你好";
byte[]arr2=s2.getBytes();//通过gbk码表将字符串转换成字节数组
for(inti=0;i<arr2.length;i++){//编码:把我们看的懂转换为计算机看的懂得
//System.out.print(arr2[i]+"");//gbk码表一个中文代表两个字节
}//gbk码表特点,中文的第一个字节肯定是负数
Strings3="琲";
byte[]arr3=s3.getBytes();
for(inti=0;i<arr3.length;i++){
System.out.print(arr3[i]+"");
}
}
}
[/code]Person类的内容:
packagecom.itheima.bean;
publicclassPerson{
privateStringname;
privateintage;
publicPerson(){
super();
}
publicPerson(Stringname,intage){
super();
this.name=name;
this.age=age;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
@Override
publicStringtoString(){
return"Person[name="+name+",age="+age+"]";
}
}
[/code]String类的其他功能*A:String的替换功能*Stringreplace(charold,charnew)*Stringreplace(Stringold,Stringnew)*B:String的去除字符串两空格*Stringtrim()*C:String的按字典顺序比较两个字符串*intcompareTo(Stringstr)*intcompareToIgnoreCase(Stringstr)案例:
packagecom.itheima.string;
publicclassDemo7_StringMethod{
publicstaticvoidmain(String[]args){
//demo1();
//demo2();
demo3();
/*
*publicintcompare(Strings1,Strings2){
intn1=s1.length();
intn2=s2.length();
intmin=Math.min(n1,n2);
for(inti=0;i<min;i++){
charc1=s1.charAt(i);
charc2=s2.charAt(i);
if(c1!=c2){
c1=Character.toUpperCase(c1);//将c1字符转换成大写
c2=Character.toUpperCase(c2);//将c2字符转换成大写
if(c1!=c2){
c1=Character.toLowerCase(c1);//将c1字符转换成小写
c2=Character.toLowerCase(c2);//将c2字符转换成小写
if(c1!=c2){
//Nooverflowbecauseofnumericpromotion
returnc1-c2;
}
}
}
}
returnn1-n2;
*/
}
privatestaticvoiddemo3(){
Strings1="a";
Strings2="aaaa";
intnum=s1.compareTo(s2);//按照码表值比较
System.out.println(num);
Strings3="黑";
Strings4="马";
intnum2=s3.compareTo(s4);
System.out.println('黑'+0);//查找的是unicode码表值
System.out.println('马'+0);
System.out.println(num2);
Strings5="heima";
Strings6="HEIMA";
intnum3=s5.compareTo(s6);
System.out.println(num3);
intnum4=s5.compareToIgnoreCase(s6);
System.out.println(num4);
}
privatestaticvoiddemo2(){
Strings="heima";
Strings2=s.trim();
System.out.println(s2);
}
privatestaticvoiddemo1(){
Strings="heima";
Strings2=s.replace('i','o');//用o替换i
System.out.println(s2);
Strings3=s.replace('z','o');//z不存在,保留原字符不改变
System.out.println(s3);
Strings4=s.replace("ei","ao");
System.out.println(s4);
}
}
[/code]案例演示:在大串中查找小串出现的次数*统计大串中小串出现的次数
packagecom.itheima.test;
publicclassTest7{
publicstaticvoidmain(String[]args){
//定义大串
Stringmax="woaiheima,heimabutongyubaima,wulunheimahaishibaima,zhaodaogongzuojiushihaoma";
//定义小串
Stringmin="heima";
//定义计数器变量
intcount=0;
//定义索引
intindex=0;
//定义循环,判断小串是否在大串中出现
while((index=max.indexOf(min))!=-1){
count++;//计数器自增
max=max.substring(index+min.length());
}
System.out.println(count);
}
}
[/code]

二、StringBuffer

StringBuffer类概述*线程安全的可变字符序列StringBuffer和String的区别*String是一个不可变的字符序列*StringBuffer是一个可变的字符序列StringBuffer的构造方法:*publicStringBuffer():无参构造方法*publicStringBuffer(intcapacity):指定容量的字符串缓冲区对象*publicStringBuffer(Stringstr):指定字符串内容的字符串缓冲区对象*StringBuffer的方法:*publicintcapacity():返回当前容量。理论值(不掌握)*publicintlength():返回长度(字符数)。实际值*案例:*构造方法和长度方法的使用
packagecom.heima.stringbuffer;
publicclassDemo1_StringBuffer{
publicstaticvoidmain(String[]args){
StringBuffersb=newStringBuffer();
System.out.println(sb.length());//容器中的字符个数,实际值
System.out.println(sb.capacity());//容器的初始容量,理论值
StringBuffersb2=newStringBuffer(10);
System.out.println(sb2.length());
System.out.println(sb2.capacity());
StringBuffersb3=newStringBuffer("heima");
System.out.println(sb3.length());//实际字符的个数
System.out.println(sb3.capacity());//字符串的length+初始容量
}
}
[/code]StringBuffer的添加功能*publicStringBufferappend(Stringstr):*可以把任意类型数据添加到字符串缓冲区里面,并返回字符串缓冲区本身*publicStringBufferinsert(intoffset,Stringstr):*在指定位置把任意类型的数据插入到字符串缓冲区里面,并返回字符串缓冲区本身案例:
packagecom.heima.stringbuffer;
publicclassDemo2_StringBuffer{
/**
*
StringBuffer是字符串缓冲区,当new的时候是在堆内存创建了一个对象,底层是一个长度为16的字符数组
当调用添加的方法时,不会再重新创建对象,在不断向原缓冲区添加字符
*/
publicstaticvoidmain(String[]args){
//demo1();
demo2();
}
privatestaticvoiddemo2(){
StringBuffersb=newStringBuffer("1234");
sb.insert(3,"heima");//在指定位置添加元素,如果没有指定位置的索引就会报索引越界异常
System.out.println(sb);
}
privatestaticvoiddemo1(){
StringBuffersb=newStringBuffer();
StringBuffersb2=sb.append(true);
StringBuffersb3=sb.append("heima");
StringBuffersb4=sb.append(100);
System.out.println(sb.toString());//StringBuffer类中重写了toString方法,显示的是对象中的属性值
System.out.println(sb2.toString());
System.out.println(sb3.toString());
System.out.println(sb4.toString());
}
}
[/code]StringBuffer的删除功能)*A:StringBuffer的删除功能*publicStringBufferdeleteCharAt(intindex):*删除指定位置的字符,并返回本身*publicStringBufferdelete(intstart,intend):*删除从指定位置开始指定位置结束的内容,并返回本身案例:
packagecom.heima.stringbuffer;
publicclassDemo3_StringBuffer{
/**
**A:StringBuffer的删除功能
*publicStringBufferdeleteCharAt(intindex):
*删除指定位置的字符,并返回本身
*publicStringBufferdelete(intstart,intend):
*删除从指定位置开始指定位置结束的内容,并返回本身
*/
publicstaticvoidmain(String[]args){
StringBuffersb=newStringBuffer();
//sb.deleteCharAt(5);//当缓冲区中这个索引上没有元素的时候就会报StringIndexOutOfBoundsException
sb.append("heima");
//sb.deleteCharAt(4);//根据索引删除掉索引位置上对应的字符
//sb.delete(0,2);//删除的时候是包含头,不包含尾
//System.out.println(sb);
//sb.delete(0,sb.length());//清空缓冲区,因为包含头不包含尾,最大索引为length-1
//System.out.println(sb);
sb=newStringBuffer();//不要用这种方式清空缓冲区,原来的会变成垃圾,浪费内存
System.out.println(sb);
}
}
[/code]###12.05_常见对象(StringBuffer的替换和反转功能)*A:StringBuffer的替换功能*publicStringBufferreplace(intstart,intend,Stringstr):*从start开始到end用str替换*B:StringBuffer的反转功能*publicStringBufferreverse():*字符串反转案例:
packagecom.heima.stringbuffer;
publicclassDemo4_StringBufferMethod{
publicstaticvoidmain(String[]args){
StringBuffersb=newStringBuffer("heima");
//sb.replace(0,3,"bai");//替换
//System.out.println(sb);
StringBuffersb=newStringBuffer("我爱总复习");
sb.reverse();
System.out.println(sb);
}
}
[/code]###12.06_常见对象(StringBuffer的截取功能及注意事项)*A:StringBuffer的截取功能*publicStringsubstring(intstart):*从指定位置截取到末尾*publicStringsubstring(intstart,intend):*截取从指定位置开始到结束位置,包括开始位置,不包括结束位置*B:注意事项*注意:返回值类型不再是StringBuffer本身案例:
packagecom.heima.stringbuffer;
publicclassDemo5_StringBufferMethod{
publicstaticvoidmain(String[]args){
StringBuffersb=newStringBuffer("woaiheima");
//Stringstr=sb.substring(4);
//System.out.println(str);
//System.out.println(sb);
Stringstr3=sb.substring(4,7);
System.out.println(str3);
}
}
[/code]StringBuffer和String的相互转换*String--StringBuffer*a:通过构造方法*b:通过append()方法*StringBuffer--String*a:通过构造方法*b:通过toString()方法*c:通过subString(0,length);案例:
packagecom.heima.stringbuffer;
publicclassDemo6_StringBuffer{
publicstaticvoidmain(String[]args){
//demo1();
StringBuffersb=newStringBuffer("heima");
Strings1=newString(sb);//通过构造将StringBuffer转换为String
System.out.println(s1);
Strings2=sb.toString();//通过toString方法将StringBuffer转换为String
System.out.println(s2);
Strings3=sb.substring(0,sb.length());//通过截取子字符串将StringBuffer转换为String
System.out.println(s3);
}
privatestaticvoiddemo1(){
StringBuffersb1=newStringBuffer("heima");//通过构造方法将字符串转换为StringBuffer对象
System.out.println(sb1);
StringBuffersb2=newStringBuffer();
sb2.append("heima");//通过append方法将字符串转换为StringBuffer对象
System.out.println(sb2);
}
}
[/code]

三、StringBuilder

StringBuilder类概述*线程不安全的可变字符序列StringBuffer和StringBuilder的区别*StringBuffer是jdk1.0版本的,是线程安全的,效率低*StringBuilder是jdk1.5版本的,是线程不安全的,效率高String和StringBuffer,StringBuilder的区别*String是一个不可变的字符序列*StringBuffer,StringBuilder是可变的字符序列功能演示:与StringBuffer类似
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: