字符串相关笔记

目录

 

1.字符串是什么

2.字符串在java中以什么形式实现

3.java中的字符串的数据类型

4.字符串的存储与使用

5字符串方法的代码

 6.StringBuffer和StringBuilder

        1.为什么有这两个类

        2.StringBuffer的拼接

        3.其他方法:

        4.StringBuilder和StringBuffer一样只不过Buffer是线程安全的

7.StringTokenizer

 8.综合代码


 

1.字符串是什么

        由多个字符组合在一起的一个序列就叫做字符串

2.字符串在java中以什么形式实现

        在java中用char[]或者byte[]来实现

3.java中的字符串的数据类型

        1.字符串也是一个引用数据类型,用String来表示

        2.java中的字符串用""来标识,就和字符类型用''来标识差不多

4.字符串的存储与使用

        在java当中有个字符串常量池。通过引号创建出来的字符串都会存储到字符串常量池当中

        同一个字符串在字符串常量池当中只创建一次

        String引用就是只是一个单纯的引用、

        String对象其实就是在内部会指向字符串常量池

public class Run{
    public static void main(String[] args){
        String a = "asd";
        String b = "asd";
        System.out.println(a==b);//此行判断直接创建字符串只会在字符串常量池生成一次
        String e = new String("asd");
        System.out.println(e==a);//此行表明生成的对象不是字符串常量,而是一个“字符串”对象,所以引用存储的地址是对象的地址而不是常量的地址
        String c = new String("xcx");
        String d = new String("xcx");
        System.out.println(c==d);//此行表明生成的对象不是字符串常量,而是一个“字符串”对象,每一次都会生成一个字符串对象,但是字符串常量只有一个
//”几乎所有“对象都是在堆区中分配空间,所以字符串也是个对象,可以直接调用字符串方法,而不需要/依托于变量(不在堆区的情况叫做对象逃逸,大三才学)
//如果以new的形式创建字符串变量,那么这个时候就和刚才不同了,new几次创建几次,即使内容一样也要创建,而且new出来的这个对象指向一个字符串常量值的对象
    }
}

        所以综合以上内容就可以知道

                String引用可以指向String对象然后再由对象指向字符串常量池

                String引用也可以直接指向字符串常量池(”几乎所有“对象都是在堆区中分配空间,所以字符串也是个对象,可以直接调用字符串方法,而不需要依托于变量)

5.字符串的相关方法 

方法名性质形参返回值作用
length非静态 int统计字符串长度
isEmpty非静态 boolean查探是否字符串是空的(字符串没内容而不是null)

charAt

非静态

     int

(0,length)

char返回对应下标的字符值(从0开始算)
equalsIgnoreCase非静态字符串boolean忽略大小写进行字符串的比较
compareTo非静态字符串int字符串比较
indexOf非静态字符串int返回新字符串在旧字符串当中第一次出现的下标
lastIndexOf非静态字符串int返回新字符串在旧字符串当中最后一次出现的下标
concat非静态字符串字符串创建一个新字符串由新旧两个字符串拼接而成
split非静态字符串字符串数组以新字符串为分割符,把旧字符串拆分成字符串数组
replace非静态字符串,字符串字符串把新字符串替换掉旧字符串里面的一些内容
subString非静态

int

 

字符串截取自该下标起往后的字符串
int,int截取该下标区间的字符串(左闭右开)
toUpperCase非静态 字符串生成新字符串把旧字符串的字符全部转成大写
toLowerCase非静态 字符串生成新字符串把旧字符串的字符全部转成小写

5字符串方法的代码

public class Run{
    public static void main(String[] args){
        String a = "asd";
        String b = "asd";
        System.out.println(a==b);//此行判断直接创建字符串只会在字符串常量池生成一次
        String e = new String("asd");
        System.out.println(e==a);//此行表明生成的对象不是字符串常量,而是一个“字符串”对象,所以引用存储的地址是对象的地址而不是常量的地址
        String c = new String("xcx");
        String d = new String("xcx");
        System.out.println(c==d);//此行表明生成的对象不是字符串常量,而是一个“字符串”对象,每一次都会生成一个字符串对象,但是字符串常量只有一个


        //方法
        //length,返回长度
        String aa = "zjh";
        System.out.println("lenght:\t"+aa.length());

        //isEmpty,返回是否为空字符串
        String bb = "";
        String bb1 = "zjh";
        System.out.println("bb: isEmpty:\t"+bb.isEmpty());
        System.out.println("bb1: isEmpty:   "+bb1.isEmpty());


        //charAt,返回下标对应的字符
        String cc = "asd";
        System.out.println("charAt:\t"+cc.charAt(0));

        //equalsIgnoreCase,忽略大小写比较
        String dd = "asdfghjkl";
        System.out.println("equalsIgnoreCase:\t"+dd.equalsIgnoreCase("ASDFGHJKL"));

        //compareTo,字符串比较,如果从某个字符开始比较发现该字符和原字符不同,那么返回新字符ASCII码于旧字符的差值,如果旧字符串比新字符串多出来一些内容,返回多出来的长度(正数),如果少一些内容,返回少的长度(负数)
        String ee = "abcd";
        System.out.println("compareTo:\t"+ee.compareTo("abcd"));//相等
        System.out.println("compareTo:\t"+ee.compareTo("Abcd"));//字符大小不同
        System.out.println("compareTo:\t"+ee.compareTo("aBcde"));//字符大小不同顺便看一下优先字符还是优先长度
        System.out.println("compareTo:\t"+ee.compareTo("a"));//看看短了返回正数还是负数
        System.out.println("compareTo:\t"+ee.compareTo("abcdeajshdk"));//看看长了返回证书还是负数

        //indexOf
        String ff="zxcvbxc,.";
        System.out.println("indexof:\t"+ff.indexOf("xc"));

        //lastIndexOf
        String gg = "asdfghjkasdjkasd";
        System.out.println("lastIndexOf:\t"+gg.lastIndexOf("asd"));//作用是拼接字符串

        //concat
        String hh ="aaaaaaa";
        System.out.println("concat:\t"+hh.concat("sd"));
        System.out.println(hh);

        //split,以指定字符串来分割现有字符串为一个字符串数组
        String ii = "asd, dfg, ghj, jkl, sdf,sdf";
        String[] iichuan = ii.split(", ");
        for(String o: iichuan){
            System.out.print(o+"\t");
        }

        //replace,替换就字符串里面的而一些内容
        String jj = "zjhzjzjzjzjzjzjzjjzjzjzjjzjzjzj";
        System.out.println("\nreplace:\t"+jj.replace("zj","xx"));

        //subString
        String kk ="zjhzjhzjhzjhzjzhzjzhzjhzjh";
        System.out.println("单参数subString:\t"+kk.substring(10));
        System.out.println("双参数subString:\t"+kk.substring(0,3));

        //toUpperCase
        String ll = "asdasdSDSD";
        System.out.println("toUpperCase:\t"+ll.toUpperCase()+"\n\t原字符串"+ll);

        //toLowerCase
        String mm =  "asdasdSDSDSD";
        System.out.println("toLowerCase:\t"+mm.toLowerCase()+"\n\t原字符串"+mm);
    }
}

运行结果: 

true
false
false
lenght:    3
bb: isEmpty:    true
bb1: isEmpty:   false
charAt:    a
equalsIgnoreCase:    true
compareTo:    0
compareTo:    32
compareTo:    32
compareTo:    3
compareTo:    -7
indexof:    1
lastIndexOf:    13
concat:    aaaaaaasd
aaaaaaa
asd    dfg    ghj    jkl    sdf,sdf    
replace:    xxhxxxxxxxxxxxxxxjxxxxxxjxxxxxx
单参数subString:    jhzjzhzjzhzjhzjh
双参数subString:    zjh
toUpperCase:    ASDASDSDSD
    原字符串asdasdSDSD
toLowerCase:    asdasdsdsdsd
    原字符串asdasdSDSDSD

 6.StringBuffer和StringBuilder

        1.为什么有这两个类

                由于String每次进行修改之后都要重新新建一个字符串,需要申请一块空间,所以对于需要反复修改的字符串,如果采用String的话会占用很多空间

        2.StringBuffer的拼接

                原本String的拼接需要创建String对象吗,hello,world,hello world,

                而对于StringBuffer不需要再创建hello world了

        StringBuffer aaa =new StringBuffer("hello");
        System.out.println("拼接字符串:\t"+aaa.append(" world"));

        3.其他方法:

方法名形参返回值作用性质
delete(int,int)String删除下标区间范围内的字符串(左闭右开)非静态
insert(int,String)String把字符串插入到对应下标的位置非静态
reserve String倒序字符串非静态
toString StringStringBuffer转String非静态
//StringBuffer类
        StringBuffer aaa =new StringBuffer("hello");
        System.out.println("拼接字符串:\t"+aaa.append(" world"));//原本String的拼接需要创建String对象吗,hello,world,hello world,而对于StringBuffer不需要再创建hello world了
        //delete方法//左闭右开的删除下标区间对应的字符串
        System.out.println("delete:\t"+aaa.delete(1,1));
        //insert方法//插入到对应下标的位置
        System.out.println("insert:\t"+aaa.insert(1,"e"));
        //reserve方法//倒叙
        System.out.println("reserve:\t"+aaa.reverse());

        String bbb = aaa.toString();
        System.out.println(bbb);
    

        4.StringBuilder和StringBuffer一样只不过Buffer是线程安全的

7.StringTokenizer

        就是用来分隔的一个类

        构造方法传递要分割的字符串以及用什么来作为分割符

        hasMoreToken方法查探是否还有分割符

        nextToken返回下一个分割符之前的内容值

String nn = "asd,asd,asd,asd,asd,asd,asd,as,das,dasd,asd";
        StringTokenizer oo = new StringTokenizer(nn,",");//这句话的意思是要分割的是nn字符串,分割符是逗号
        while(oo.hasMoreTokens()){//看看从现在起后面有没有分割符了
            System.out.print(oo.nextToken()+"\t");//返回下一个分割符前面的内容
        }

 8.综合代码

public class Run{
    public static void main(String[] args){
        String a = "asd";
        String b = "asd";
        System.out.println(a==b);//此行判断直接创建字符串只会在字符串常量池生成一次
        String e = new String("asd");
        System.out.println(e==a);//此行表明生成的对象不是字符串常量,而是一个“字符串”对象,所以引用存储的地址是对象的地址而不是常量的地址
        String c = new String("xcx");
        String d = new String("xcx");
        System.out.println(c==d);//此行表明生成的对象不是字符串常量,而是一个“字符串”对象,每一次都会生成一个字符串对象,但是字符串常量只有一个


        //方法
        //length,返回长度
        String aa = "zjh";
        System.out.println("lenght:\t"+aa.length());

        //isEmpty,返回是否为空字符串
        String bb = "";
        String bb1 = "zjh";
        System.out.println("bb: isEmpty:\t"+bb.isEmpty());
        System.out.println("bb1: isEmpty:   "+bb1.isEmpty());


        //charAt,返回下标对应的字符
        String cc = "asd";
        System.out.println("charAt:\t"+cc.charAt(0));

        //equalsIgnoreCase,忽略大小写比较
        String dd = "asdfghjkl";
        System.out.println("equalsIgnoreCase:\t"+dd.equalsIgnoreCase("ASDFGHJKL"));

        //compareTo,字符串比较,如果从某个字符开始比较发现该字符和原字符不同,那么返回新字符ASCII码于旧字符的差值,如果旧字符串比新字符串多出来一些内容,返回多出来的长度(正数),如果少一些内容,返回少的长度(负数)
        String ee = "abcd";
        System.out.println("compareTo:\t"+ee.compareTo("abcd"));//相等
        System.out.println("compareTo:\t"+ee.compareTo("Abcd"));//字符大小不同
        System.out.println("compareTo:\t"+ee.compareTo("aBcde"));//字符大小不同顺便看一下优先字符还是优先长度
        System.out.println("compareTo:\t"+ee.compareTo("a"));//看看短了返回正数还是负数
        System.out.println("compareTo:\t"+ee.compareTo("abcdeajshdk"));//看看长了返回证书还是负数

        //indexOf
        String ff="zxcvbxc,.";
        System.out.println("indexof:\t"+ff.indexOf("xc"));

        //lastIndexOf
        String gg = "asdfghjkasdjkasd";
        System.out.println("lastIndexOf:\t"+gg.lastIndexOf("asd"));//作用是拼接字符串

        //concat
        String hh ="aaaaaaa";
        System.out.println("concat:\t"+hh.concat("sd"));
        System.out.println(hh);

        //split,以指定字符串来分割现有字符串为一个字符串数组
        String ii = "asd, dfg, ghj, jkl, sdf,sdf";
        String[] iichuan = ii.split(", ");
        for(String o: iichuan){
            System.out.print(o+"\t");
        }

        //replace,替换就字符串里面的而一些内容
        String jj = "zjhzjzjzjzjzjzjzjjzjzjzjjzjzjzj";
        System.out.println("\nreplace:\t"+jj.replace("zj","xx"));

        //subString
        String kk ="zjhzjhzjhzjhzjzhzjzhzjhzjh";
        System.out.println("单参数subString:\t"+kk.substring(10));
        System.out.println("双参数subString:\t"+kk.substring(0,3));

        //toUpperCase
        String ll = "asdasdSDSD";
        System.out.println("toUpperCase:\t"+ll.toUpperCase()+"\n\t原字符串"+ll);

        //toLowerCase
        String mm =  "asdasdSDSDSD";
        System.out.println("toLowerCase:\t"+mm.toLowerCase()+"\n\t原字符串"+mm);



        //StringBuffer类
        StringBuffer aaa =new StringBuffer("hello");
        System.out.println("拼接字符串:\t"+aaa.append(" world"));//原本String的拼接需要创建String对象吗,hello,world,hello world,而对于StringBuffer不需要再创建hello world了
        //delete方法//左闭右开的删除下标区间对应的字符串
        System.out.println("delete:\t"+aaa.delete(1,1));
        //insert方法//插入到对应下标的位置
        System.out.println("insert:\t"+aaa.insert(1,"e"));
        //reserve方法//倒叙
        System.out.println("reserve:\t"+aaa.reverse());

        String bbb = aaa.toString();
        System.out.println(bbb);

        String nn = "asd,asd,asd,asd,asd,asd,asd,as,das,dasd,asd";
        StringTokenizer oo = new StringTokenizer(nn,",");//这句话的意思是要分割的是nn字符串,分割符是逗号
        while(oo.hasMoreTokens()){//看看从现在起后面有没有分割符了
            System.out.print(oo.nextToken()+"\t");//返回下一个分割符前面的内容
        }
    }

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值