javase:String工具类

String类的特点

字符串的表示方式

Char[],String,StringBuilder,StringBuff

字符串的使用方法

public class Stringdemo {
    public static void main(String[] args){
        /**
         * str : String
         * "abc" String
         */
        String str = "abc";//等价于String str = new String("abc");

        //1.String类型的对象不会被改变
        String str1 = new String("123");
        String str2 = str1.concat("4");
        System.out.println(str1);//123
        System.out.println(str2);//1234
        System.out.println("比较两个对象的地址是否相同"+str1 == str2);//false  str2重新产生对象

        //2.如果字面量的结果相同被优化成一个对象
        String s1 = "abc1234";
        String s2 = "abc" + "1234";
        System.out.println("比较s1和s2的结果地址:" + (s1 == s2));//true

        String s3 = "abc" + 1234;
        System.out.println("比较s1和s3的结果地址:" + (s1 == s3));//true

        String s4 = "a" + "bc" + "1234";
        System.out.println("比较s1和s4的结果地址:" + (s1 == s4));//true

        String s5 = "a" +"b" + "c" + 123 + 4;
        System.out.println("比较s1和s5的结果地址:" + (s1 == s5));//true

        final int ONE = 1234;//常量
        String s6 = "abc" + ONE;
        System.out.println("比较s1和s6的结果地址:" + (s1 == s6));//true

        int a = 1234;//变量
        String s7 = "abc" + a ;
        System.out.println("比较s1和s7的结果地址:" + (s1 == s7));//false  a是变量不是常量

        //除toString()方法外 其他所有方法返回值都产生了新对象
        String st1 = "a b c ";
        String st2 = st1.concat("1");//字符串连接
        System.out.println(st1 == st2 );//false

        String st3 = st1.trim();//去掉空白 包含换行,制表符,首尾空格(中间空格不会被去掉))
        System.out.println(st1 == st3 );//false
    }

}

String类的特点

①String类不能被继承,被finall修饰
②String类内部实现是char[],char[]的值可以随意改变,字符串本身也是一个类型无法随意改变
③字符串的字面量也是String类型的实例:String str = “abc”;”abc”就是字符串的字面量
④String设计原则:对象的内容不变,即String这个字符串对象内容不变
⑤String类在实例化过程中,如果它的实例都是字面量,而且字面量的结果是一致的,那么系统就会优化,让其在内存中的值存在一个对象。
⑥String重写了equals().hasCode().toString()方法.String API如果String的方法返回值为String类型,那么就会产生一个新String对象。toString()除外,包括(+)也会产生新对象。

String常用API

String类型的常用API

import java.io.UnsupportedEncodingException;
import java.util.Arrays;

public class StringAPI {

    public static void main(String[] args) throws UnsupportedEncodingException {

        //1.String类型API
        //构造方法
        //a)创建一个空串
        String s1 = new String();
        System.out.println("s1:"+s1);//空
        String s2 = " ";
        System.out.println("s2:"+s2);//空

        //b)将byte[]数组转换成String
        byte[] data = {65,66,67,67,68,69,70};
        String s3 = new String(data);
        System.out.println("s3:"+s3);//ABCCDEF  转换成ASCLL码打印

        //c)将部分byte[]数组转换成String
        String s4 = new String(data,2,3);//(data,2,3) (数组,初始位置。数组长度)
        System.out.println("s4:"+s4);//CCD    转换成ASCLL码打印

        //d)将char[]数组的内容转化成字符串
        char[] buf = {'a','b','c','d','e','f'};
        String s5 = new String(buf);
        System.out.println("s5:"+s5);//abcdef

        //e)将char[]数组中部分内容转换成字符串
        String s6 = new String(buf,3,3);//(数组,初始位置,长度)
        System.out.println("s6:"+6);//6

        //f)货汽车字符串中的某个字符
        String s7 = "asdfghj";
        char c = s7.charAt(4);
        System.out.println("字符为:"+c);//g

        //g)将字符串串长度转换成字符数组
        char[] buff = s7.toCharArray();
        System.out.println("数组的内容:"+ Arrays.toString(buff));//[a, s, d, f, g, h, j]

        //h)将字符串转换成byte数组
        byte[] b = s7.getBytes();
        System.out.println("数组内容:"+Arrays.toString(b));//[97, 115, 100, 102, 103, 104, 106]

        //i)将字符串按照指定的字符集转换成byte数组
        String s8 = "java学习过程";
        //1)将字符串按照指定的字符集转换成byte数组  编码
        byte[] b1 = s8.getBytes("gbk");
        byte[] b2 = s8.getBytes("utf-8");
        System.out.println("数组内容为:"+b1);//[B@1b2c6ec2
        System.out.println("数组内容为:"+b2);//[B@4edde6e5

        //2)将byte数组转换成文字  解码
        System.out.println("转换结果为:"+new String(b1,"gbk"));//java学习过程
        System.out.println("转换结果为:"+new String(b2,"utf-8"));//java学习过程

        //常用普通方法
        String st1 = "abnadfaAJHJcnsAjf";
        //a.获取第一个“A“的位置
        int index = st1.indexOf("A");
        System.out.println("第一个A所在的位置:"+index);//7

        //b.获取第二个“A”所在的位置
        int index1 = st1.indexOf("A",index+1);
        System.out.println("第二个A所在的位置:"+index1);//14

        //c.反向查找
        int last = st1.lastIndexOf("A");//14
        System.out.println("最后一个A所在的位置:"+last);//14

        //d.获取倒数第二个“A”所在的位置
        int last1 = st1.lastIndexOf("A",last-1);
        System.out.println("倒数第二个A所在的位置:"+last1);//7

        //e.字符串截取
        String st2 = "abnadfaAJHJcnsAjf";
        //1)从第二个字符开始截取到第八个字符
        String sub1 = st2.substring(1,7);
        System.out.println(sub1);//bnadfa
        //2)截取第二个字符到末尾
        String sub2 = st2.substring(2);
        System.out.println(sub2);//nadfaAJHJcnsAjf

        //f.获取字符串的长度
        System.out.println("字符串长度:"+st2.length());//17
        //g.比较两个字符串是否相等
        String st3 = "abc";
        String st4 = "abc123";

        System.out.println("比较两个字符串是否相等:"+st3.equals(st4));//false

        //h.去掉首位空白(换行,制表符,空格)
        String st5 = "\t a \n b  c \n";
        System.out.println("st5.length:"+st5.length());//12
        String st6 = st5.trim();
        System.out.println("St6.length:"+st6.length());//8

        //i.字符大小写转换
        String st7 = "KDJHFSndjfsjf";
        System.out.println("将字符串转换成大写:"+st7.toUpperCase());//KDJHFSNDJFSJF
        System.out.println("将字符串转换成大写:"+st7.toLowerCase());//kdjhfsndjfsjf

    }

}

String工具类正则

正则表达式

概念:一个字符串,用指定字符来限制当前字符串的内容
语法:普通字符串:“abc”
当前位置可以出现的字符:[]
当前字符串可以出现的次数:{}
从起始位置到结束位置之间的字符都可取:-
字符串的起始位置:^
字符串的结束位置:$
可以出现start到end之间的次数:(start,end)
表示[0,9]:\d
表示非数字:\D
表示[a-z A-Z 0-9]:\w
表示^\w:\w

String处理正则API

①boolean natch(String regx) 用英语判断当前字符串是否符合regx的正则表达式
②String[] split(String regx) 更具regx将字符串切割成多个子串
③String replaceAll(String regx,String str) rehex 要被替换的正则, str:替换的内容 String:替换后的字符串

简单的正则表达式样例

1.正数 ^\d*.\d+& = ^ [0-9]{1,}.[0-9]{0,}$

2.负数 ^-\d*.\d+$ = ^-[0-9](1,0}.[0-9]{0,}$

3.用户名正则(4-16位,字母,数字,下划线,减号): ^ [a-zA-Z0-9_]{4,1}$
= ^ [\w-][4,16]$

String处理正则表达式API

package StringRegularExpression;

import java.util.Arrays;

public class StringRegexDemo {

    public static void main(String[] args){
        //1.判断字符是否满足正则表达式
        String str = "123";
        String str1 = "asd";
        //2.正则表达式 ^[0-9]{1,3}$ 或者 ^\d{1,3}$  含义:0-999
        boolean rs = str.matches("^[0-9]{1,3}$");
        System.out.println(rs);//true
        boolean rs1 = str1.matches("^[0-9]{1,3}$");
        System.out.println(rs1);//false

        //3.字符串切割
        String msg = "123-456#ABC-78#abc-6#mnq-45623-544#LDS";
        String[] ms = msg.split("-");
        System.out.println("切割结果为:"+ Arrays.toString(ms));//[123, 456#ABC, 78#abc, 6#mnq, 45623, 544#LDS]

        String[] ms1 = msg.split("#");
        System.out.println("切割结果为:"+ Arrays.toString(ms1));//[123-456, ABC-78, abc-6, mnq-45623-544, LDS]

        String[] ms2 = msg.split("[#-]");
        System.out.println("切割结果为:"+ Arrays.toString(ms2));//[123, 456, ABC, 78, abc, 6, mnq, 45623, 544, LDS]

        //4.字符串替换  replaceAAll()  可以使用正则表示替换字符
        String m1 = msg.replace("-",",");
        System.out.println("m1:"+m1);//123,456#ABC,78#abc,6#mnq,45623,544#LDS

        String m2 = msg.replaceAll("#",",");
        System.out.println("m2:"+m2);//123-456,ABC-78,abc-6,mnq-45623-544,LDS

        String m3 = msg.replaceAll("[-#]",",");
        System.out.println("m3:"+m3);//123,456,ABC,78,abc,6,mnq,45623,544,LDS

        //5.其他替换的方法
        //replace():只支持单种符号的替换,不能使用正则表示
        String m4 = msg.replace("-","_");
        System.out.println("m4:"+m4);//123_456#ABC_78#abc_6#mnq_45623_544#LDS

        //reolaceFirst() 只替换第一次出现的字符串
        String m5 = msg.replaceFirst("[-#]","@");
        System.out.println("m5"+m5);//123@456#ABC-78#abc-6#mnq-45623-544#LDS
    }

}

StringBuilder和StringBuffer

StringBuilder特点

①都是被final修饰,不能继承
②StringBuilder,StringBuffer都是动态字符序列(字符串),采用动态数组的算法,来实现动态存储数据方式,完成字符串的动态存储,即StringBuilder,StringBufferC采用变长数组存储
③StringBuilder,StringBuffer内部原理是char[]
④StringBuilder,StringBuffer的内存对象是可变的,说明他们是一个可变字符序列

StringBuilder常用API

①StirngBuilder append(String)向原字符串后面追加新的字符
②String insert(int index,String str)在index位置插入新的字符串index从0开始
③StringBuilder delete(int start,int end)删除从start到end之间的字符串,不包含end

StringBuilder使用样例

public class StringBuilderDemo {

    public static void main(String[] args){
        //1.创建一个StringBuilder
        StringBuilder sb = new StringBuilder();
        StringBuilder sb1 = sb.append("abc");
        StringBuilder sb2 = sb.append("123");

        System.out.println("比较地址是否相等:"+(sb == sb1));//true
        System.out.println("比较地址是否相等:"+(sb == sb2));//true

        System.out.println(sb);//abc123
        System.out.println(sb1);//abc123
        System.out.println(sb2);//abc123

        //2.StringBuilder的API
        StringBuilder s1 = new StringBuilder("信管1812");
        System.out.println(s1);//信管1812
        s1.append("qjg");
        System.out.println(s1);//信管1812qjg  追加字符串
        s1.insert(2,"2018");
        System.out.println(s1);//信管20181812qjg  指定位置插入字符串
        s1.delete(5,8);
        System.out.println(s1);//信管20112qjg  删除指定位置字符串

        //3.连缀
        StringBuilder s2 = new StringBuilder("abc").append("123").insert(1,"-").delete(2,4);
        System.out.println(s2);//a-123 对字符串进行连续的操作,类型必须为StringBuilder型
    }

}

StringBuilder,StringBuffer转换

String->StringBuilder,StringBuffer :
①new StringBuilder(String)
② newStringBuffer(str)
StringBuilder,StringBuffer : 调用toString方法

public class StringBuilderDemo {

        //Stringhe和StringBuilder之间是可以转换的
        //a)将Stringz转换成StringBuilder
        String st = "abc";
        StringBuilder s3 = new StringBuilder(st);
        //b)StringBuilder转换成String
        String st1 = s3.toString();
        System.out.println(st1);//abc 转换前后没变化

        //优化方案
        String st2 = "abc";
        String st3 = "123";
        String st4 = st2 + st3;
        //等价于
        String st5 = new StringBuilder("abc").append("123").toString();

    }

}

StringBuilder和StringBuffer对比分析

相同点:内部都是char[]数组,都是可变的字符序列,API大致相同
不同点:StringBuffer:java早期引入,线程安全,速度慢
StringBuilder:java5.0引入,非线程安全,速度快

String StringBuilder和StringBuffer对比分析

String采用定长数组,StringBuffer,StringBuilder采用变长数组

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【完整课程列表】 资源汇总下载地址:https://download.csdn.net/download/qq_27595745/55418618 Java SE编程入门教程 collection与collections(共7页).pptx Java SE编程入门教程 java GC(共6页).pptx Java SE编程入门教程 java instanceof(共3页).pptx Java SE编程入门教程 java IO(共28页).pptx Java SE编程入门教程 java Math(共11页).pptx Java SE编程入门教程 java object(共9页).pptx Java SE编程入门教程 java static final(共24页).pptx Java SE编程入门教程 java this和super(共10页).pptx Java SE编程入门教程 java 常用API(共22页).pptx Java SE编程入门教程 javaGUI编程快速入门(1)(共82页).pptx Java SE编程入门教程 java包装器(共9页).pptx Java SE编程入门教程 java反射机制(共16页).pptx Java SE编程入门教程 java泛型(共11页).pptx Java SE编程入门教程 java封装继承多态(共56页).pptx Java SE编程入门教程 java集合(共38页).pptx Java SE编程入门教程 java接口(共21页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共56页).pptx Java SE编程入门教程 java类和对象方法以及包的使用(共62页).pptx Java SE编程入门教程 java判断循环(共79页).ppt Java SE编程入门教程 java入门以及变量debug(共63页).pptx Java SE编程入门教程 java设计模式(共17页).pptx Java SE编程入门教程 java数组(共33页).pptx Java SE编程入门教程 java网络编程(共29页).pptx Java SE编程入门教程 java线程(共61页).pptx Java SE编程入门教程 java序列化(共14页).pptx Java SE编程入门教程 java异常(共57页).pptx Java SE编程入门教程 java正则(共8页).pptx Java SE编程入门教程 properties(共3页).pptx Java SE编程入门教程 String字符串(共27页).pptx Java 位运算.docx java正则表达式例子大全 共10页.doc JAVA正则表达式实例教程 共17页.docx JAVA正则表达式实例教程 共17页.pdf 递归算法.docx 堆和栈.wps

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值