Java中String的那些事?

对于String在Java当作使用波多,但是,笔者目前没有总结过多少,在今日接触到了不少关于String的问题,那么,恰逢此时,笔者来做一个总结吧!!来聊一聊Java中String的那些事??

由于笔者在一开始学习了C语言,然后在学习的Java部分!所以笔者从C语言开始说起吧!

请各位学过C语言的老铁,来仔细思考一下:在C语言阶段,有没有一种数据类型是:String类型的呢??显而易见的,在C语言中这个是没有吧!!对于char *p="hello";而言,此时p仅仅是一个指针变量类型,但是,在Java中,我们有了一个全新的类型:String str="hello";

        String str="hello";
        //打印
        System.out.println(str);

在这个代码中,str存储的仍然为'h'的地址,不过这个我们是看不到的!因为在Java中,没有指针,当然也拿不到地址了!!

提醒:在Java中,没有所谓的字符串以'\0'结尾的说法!——》根据字符串的个数,来判定是否结束,"hello'有五个字符,则打印5个字符就可以结束了!

字符串相加:

        //整型相加:
        int a=10;
        int b=20;
        System.out.println(a+b);
        //字符串相加
        String str1="hello ";
        String str2="world ";
        System.out.println(str1+str2);

在Java当中,在字符串当中,如果两个字符串进行相加,那么,它的意思是:拼接!!

上面是一些前言部分,那么,接下来进入敲黑板的环节!!

String是专门用来存放字符串类型的!

各位老铁可以回顾一下目前阶段的代码,想必,不是数组就是字符串居多吧!所以,目前的String的学习还是很重要的!

当我们在IDEA中,连续摁两下SHIFT键,搜素一下String,那么,我们就可以得到String相关的……嗯!

当我们在学习一个类的时候,一定要从构造方法开始学习,原因在于:类的目的就是实列化对象,那么,实列化对象的首要条件就是:一定会调用构造方法!!所以归根结底还是得从构造方法开始学习!!

        String str3="hello3";
        String str4=new String("hello4");
        System.out.println(str3);
        System.out.println(str4);

在这个代码中,对于str4的这个写法,其实是比较常见的!!在该过程中,调用了默认的构造方法!

当然,在String的构造方法中也可以传入一个字符数组!

        char[] ch={'h','e','l','l','o'};
        String str5=new String(ch);//调用默认的构造方法!
        System.out.println(str5);

在上述的这个代码中,就传入了字符数组,那么,在实列化的过程,就会调用默认的构造方法!

String是引用类型,内部并不会存储字符串,而是存储字符串的首地址!!

        //求字符串的长度
        String str6="hello6";
        System.out.println(str6.length());
        
        //求字符数组的长度
        char[] ch1={'h','e','l','l','o','6'};
        System.out.println(ch.length);

我们需要注意,这两个方法中的length后面是否带有括号()!!这个问题,经常在我们手撕算法的时候出错!!特别警告!!

String中的空与不指向任何对象

        String str7="";//里面没有存放任何东西
        System.out.println(str7.length());//0
        System.out.println(str7.isEmpty());//true

        //str8不指向任何对象
        String str8=null;

在Java中,”“(双引号)引起来的就是字符串(String对象)的长度!

System.out.println("xiaojunzi".length());//9

当然,这种写法也是正确的,经得住考验!!

String对象的比较!!

作为在String中吃过亏的笔者,来告诉大家一下:我们在以后,会经常遇到:判断两个字符串一样不一样??判断两个字符串谁大谁小的问题!

其实,说白了,对于字符串一般有下述的两个问题:

  1. 相不相同?

  1. 大小?

在这之前,我们一般都是通过等号(==)来进行比较相不相同,那么,这个判断在String是一种错误的选择!!

        String str9=new String("hello");
        String str10=new String("abcd");
        String str11=new String("hello");
        
        System.out.println(str9==str10);//false
        System.out.println(str9==str11);//false

在这个代码中:通过str9==str11的结果考验显示:通过等号(==)来比较字符串,是一个错误的决定!!通过等号(==)确定的是:判断保存的地址一样不一样!!

如果我们要判断两个字符串里面存放的内容是否一样,那么,我们就需要用到:.equals()

        System.out.println(str9.equals(str10));//false
        System.out.println(str9.equals(str11));//true

.equals()比较两个引用所指向的对象当中的内容是否一样!!.equals()只能判断是否相同,但是对于两个字符串的大小关系是不能比较的!!

比较大小用:.compareTo()

        System.out.println(str9.compareTo(str10));//7
        System.out.println(str9.compareTo(str11));//0

.compareTo()会返回一个大于0的数字/等于0的数字/小于0的数字,至于具体是多少,这就得根据两个相比较的字符串来进行判定了!!强求不得!当然,这个我们也可以看.compareTo()的源码来得出!!

但是,当我们要比较的两个字符串需要忽视大小写,如何进行比较??比如:将”Hello“与”hello“判断为一样?

        String str12=new String("Hello");
        String str13=new String("hello");
        //忽视大小写比较
        System.out.println(str12.compareToIgnoreCase(str13));

但是,当我们输入的数据为;中文与英文的混合,那么, 该数据则没有可比性了!!

忽略大小写,判断是否相同:

        String str12=new String("Hello");
        String str13=new String("hello");
        //忽略大小写,判断是否相同:
        System.out.println(str12.equalsIgnoreCase(str13));

字符串查找:

对于字符串的查找也是一个非常重要,非日常常见的操作,String类提供的常用的查找方法:

        char charAt(int index)
        //返回index位置上的字符,如果index为负数或者越界,那么,会抛出异常
        int indexOf(int ch)
        //返回ch第一次出现的位置,没有则返回-1
        int index(int ch,int fromIndex)
        //从fromIndex位置开始找ch第一次出现的位置,没有则返回-1
        int indexOf(String str)
        //返回str第一次出现的位置,没有则返回-1
        int indexOf(String str,int fromIndex)
        //从fromIndex位置开始找str第一次出现的位置,没有则返回-1
        int lastIndexOf(int ch)
        //从后往前找,返回ch第一次出现的位置,没有则返回-1
        int lastIndexOf(int ch,int fromIndex)
        //从fromIndex位置开始,从后往前找ch第一次出现的位置,没有则返回-1
        int lastIndexOf(String str)
        //从后往前找,返回str第一次出现的位置,没有则返回-1
        int lastIndexOf(String str,int fromIndex)
         //从fromIndex位置开始,从后往前找str第一次出现的位置,没有则返回-1

对于上述的这些方法,我们可以在官方文档中找到!!

由于官方文档所涉及到的内容比较多,笔者也不可能全部讲完,所以只能选择几个来作为列子进行使用一下!!

        //char charAt(int index)
        //返回index位置上的字符,如果index为负数或者越界,那么,会抛出异常
        String str1="hello";
        char ch=str1.charAt(1);//这里的1是指下标!
        System.out.println(ch);

        //通过遍历可以拿到整个字符串
        for (int i = 0; i < str1.length(); i++) {
            System.out.print(str1.charAt(i)+" ");
        }
        System.out.println();

        //int indexOf(int ch)
        //返回ch第一次出现的位置,没有则返回-1
        String str2="abababcabcdabc";
        int arr=str2.indexOf('c');
        System.out.println(arr);


        // int index(int ch,int fromIndex)
        //从fromIndex位置开始找ch第一次出现的位置,没有则返回-1
        String str3="abababcabcdabc";
        System.out.println(str3.indexOf('c',5));

        // int indexOf(String str)
        //返回str第一次出现的位置,没有则返回-1
        String str4="abababcabcdabc";
        System.out.println(str4.indexOf("abcd"));

        //int indexOf(String str,int fromIndex)
        //从fromIndex位置开始找str第一次出现的位置,没有则返回-1
        String str5="abababcabcdabc";
        System.out.println(str5.indexOf("abcd",5));

        // int lastIndexOf(int ch)
        //从后往前找,返回ch第一次出现的位置,没有则返回-1
        String str6="abababcabcdabc";
        System.out.println(str1.lastIndexOf('a'));

        // int lastIndexOf(int ch,int fromIndex)
        //从fromIndex位置开始,从后往前找ch第一次出现的位置,没有则返回-1
        String str7="abababcabcdabc";
        System.out.println(str6.lastIndexOf('a',7));

        //int lastIndexOf(String str,int fromIndex)
        //从fromIndex位置开始,从后往前找str第一次出现的位置,没有则返回-1
        String str8="abababcabcdabc";
        System.out.println(str7.lastIndexOf("abc",8));//返回的是首字符a的下标

上述代码的运行结果为:

字符串转化

1.数字和字符串的转化

        String str9=String.valueOf(123);
        System.out.println(str9);

将数字123转化为字符串123,在最后打印出来的一定是一个字符串了,不信的各位老铁,可以对打印的结果进行+1/-1处理,这样就能判断是否转化成功了!

当然,我们也可以将任意类型转化为字符串!

        class Person{

        }

        String str10= String.valueOf(new Person());
        System.out.println(str10);

最好的打印结果……嗯,这就不用说了吧!类似于C/C++中的地址一样的一串字符+数字

2.字符串转数字

        String str11="123";
        int data=Integer.parseInt(str11);
        System.out.println(data);

这个最后的结果就是数字123了!!不信的各位老铁,可以对打印的结果进行+1/-1处理,这样就能判断是否转化成功了!借助了包装类来进行转化!

3.大小写的转化

小写转大写操作

        String str12="abcdef";
        System.out.println(str12.toUpperCase());

大写转小写的操作

        String str13="ABCDEFG";
        System.out.println(str13.toLowerCase( ));

对于这两个大写转小写/小写转大写的操作,想必大家都或多或少的经历过吧!!比如:输入验证码:大小写忽略的情况!!

4.字符串转数组(用到的非常多)

        String str14="abcdef";
        char[] ch1=str14.toCharArray();
        //可以遍历数组,也可以对数组里面的字符进行操作
        for (int i = 0; i < ch1.length; i++) {
            System.out.print(ch1.length+" ");
        }

5.字符串替换

所谓的字符串替换,是指:使用一个新的字符串替换掉已有的字符串,可以使用的方法如下:

        //替换所有的指定内容
        String repalce(String regex,String repalcement)
        //替换首个内容
        String repalceFrist(String regex,String repalcement)

请看下述替换掉所有的指定内容的代码:


        //替换掉所有的字符
        String str1="abababcdabcabcde";
        String ret=str1.replace('a','p');
        System.out.println(ret);
        System.out.println(str1);

在这里,我们需要注意的是:所谓的转化,是指:所有的字符串的转化都不是在原来字符串进行改变,都会产生一个新的对象!(原来的字符,并不会发生改变!),不相信的各位老铁,可以打印试一下情况!!

    public static void main(String[] args) {
        String str1="ababababcabcdabcde";
        String ret1=str1.replace("ab","0000");
        System.out.println(ret1);
        //ret1与ret2有相同的效果
        String ret2=str1.replaceAll("ab","0000");
        System.out.println(ret2);

        //把第一个ab替换为0000
        String ret3=str1.replaceFirst("ab","0000");
        System.out.println(ret3);
    }

该段代码的运行结果为;

字符串拆分

顾名思义:字符串的拆分,就是将一个完整的字符串按照指定的分隔符划分为若干个子字符串,可用方法如下:

    String[] split(String regex)
        //把字符串全部拆分
    
    String[] split(String regex,int limit)
        //把字符串以指定的格式,拆分为limit组
    

那么,请看接下来的代码吧!

        String str2="Hello EveryBoby Happy";
        String[] arr=str2.split(" ");
        //以空格进行拆分
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
        System.out.println();

        String str3="Hello EveryBoby Happy";
        String[] array=str3.split(" ",2);
        //以空格进行拆分,拆分成两组
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]+" ");
        }
        System.out.println();
    }

代码的运行结果为:

上述便是主要的大致内容了,但是,笔者还是忍不住整点注意事项!毕竟这个注意事项也是挺常见的!!

注意事项:(竖号,逗号,乘号,点号)

  1. 字符“|“,“,“,“*“,“.“都得写上转义字符,即前面加上”\\”;

  1. 如果是以“\\“为分隔符,那么,我们就得写成”\\\\”;

  1. 如果一个字符串有多个分隔符,那么,我们可以用“|“作为连接符!(当然,我们也可以分割完这个,在分割下一个!)

比如:我们最常见的IP地址,就得以”.”(点号)来进行分割

        String str1="129.168.0.1";
        String[] arr=str1.split("\\.");
        for (int i = 0; i < str1.length(); i++) {
            System.out.println(arr[i]);
        }

代码的运行结果为:

有多个分隔符的情况:

        String str1="192&168=1";
        String[] ret=str1.split("&|=");
        for (int i = 0; i < ret.length; i++) {
            System.out.println(ret[i]);
        }

代码的运行结果为:

当然,上述的多个分隔符的情况,我们也可以采取多次拆分的方法!!

        String str1="192&168=1";
        String[] arr=str1.split("&");
        //先以”&“进行拆分
        for (int i = 0; i < arr.length; i++) {
            String[] array= arr[i].split("=");
            //再以”=“等号进行拆分
            for (String s:array) {
                System.out.println(s);
            }
        }

该段代码的运行结果为:

当然对于该段代码的写法,笔者不怎么提倡!!写出来就是为了让大家了解一下该方法罢了!!当作一个娱乐即可!

字符串截取

当我们看到:截取,那么,想必我们可能就理解啥意思了吧!!

所谓的截取,就是从一个完整的字符串之中截取出部分内容,可用方法如下:

    String subString(int beginIndex)
        //从指定索引截取到结尾
    String subString(int beginIndex,int endIndex)
            //截取部分内容

注意:上述的所有代码,都不是在原来字符串进行替换的,都会产生一个新的对象!!

        String str="abcdefghijklmn";
        String s=str.substring(2);
        //返回从2位置开始截取的所有字符
        System.out.println(s);

        String s2=str.substring(2,6);
        //[2,6)左闭右开
        System.out.println(s2);

上述代码的运行结果为:

字符串相关的其他操作

笔者仅写几个使用比较多的情况!


    String trim()
        //去掉(删除)字符串中的左右空格,保留中间空格
    String toUpperCase()
            //字符串转小写
    String toLowerCase()
                //字符串转小写
    

以:删除掉字符串左右两边的空格,保留中间空格为列:

        String str=" hello abcd ";
        System.out.println(str);
        //删除字符串中的左右两边的空格,仅保留中间的空格
        String ret=str.trim();
        System.out.println(ret);

该段代码的运行结果为:

具体请见代码的运行结果(根据代码的运行结果可以看出:删除掉了字符串左右两边的空格,仅仅保留了中间的空格)

猜你喜欢

转载自blog.csdn.net/weixin_64308540/article/details/129962673