javase:String工具类

本文介绍 Java SE 中字符串的特性和使用方法,包括 String 类的特点、字符串处理 API、正则表达式的应用,以及 StringBuilder 和 StringBuffer 的区别与使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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采用变长数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值