Java——String类

07-11 1386阅读

目录

  • 一、String类是?
    • 字符串的不可变性
    • 二、String类的基本用法
      • 1 字符串的构造
      • 2 String对象的比较
      • 3. 字符串查找
      • 4.转化
      • 5.字符串替换
      • 6.字符串拆分
      • 7. 字符串截取
      • 8.字符串去首尾空格
      • 10.字符串修改
      • 三、StringBuffer和StringBuilder
          • String、StringBuffer、StringBuilder的区别

            一、String类是?

            我想小伙伴们在学习C语言的时候就接触到了字符串了吧,但是在C语言中表示字符串只能使用

            字符数组 char[10] str = “hello”; 或 字符指针 char *str = “hello”; 却没有提供专门的String类。而在面向对象的Java则专门提供了String类及其操作,更加方便了我们程序员的使用。

            字符串的不可变性

            字符串的内容是不可以改变的。

            Java——String类

            • String类中的字符实际维护着一个叫value的字符数组。
            • String类被final修饰,表示final不能被继承。
            • final修饰value,表示value不能引用其他的数组,但是数组的内容还是可以改变滴!

              在String 中 所有涉及到可能修改字符串内容的操作都是创建一个新对象,改变的是新对象。

              例如在求子串中:

              Java——String类

              有些人说:字符串不可变是因为其内部保存字符的数组被final修饰了,因此不能改变。

              • 这种说法是不正确的。首先final修饰String 表明String类是最终的类,不可修改,不可继承。final修饰引用类型表明该引用变量不能引用其他对象,但是其引用对象中的内容还是可以修改的。
                  public static void main(String[] args) {
                        final char[] arr = {'h','e','l','l','o'};
                        arr[0] = 'H';
                        System.out.println(String.valueOf(arr));//Hello
                        // arr = new char[]{'h','o'};Error
                    }
                

                二、String类的基本用法

                1 字符串的构造

                String 是引用数据类型,本身并不存储字符串本身。

                public class Test {
                    public static void main(String[] args) {
                        //1.直接赋值
                        String s1 = "first";
                        //2.new 对象
                        String s2 = new String("second");
                        //3. 创建字符数组
                        char[] arr = {'t','h','i','r','d'};
                        String s3 = new String(arr);
                        
                        System.out.println(s1);
                        System.out.println(s2);
                        System.out.println(s3);
                    }
                }
                

                Java——String类

                注意:

                String s1 = “first”;

                Java虚拟机(JVM)会首先检查字符串常量池中是否已经存在该字符串"first"。如果存在,就直接返回该字符串在常量池中的引用;如果不存在,则将该字符串添加到常量池中,并返回其在常量池中的引用。

                2 String对象的比较

                1. == 比较是否同一个引用
                     //s1 s2 分别是new 一个新的字符串"hello"
                    String s1 = new String("hello");
                	String s2 = new String("hello");
                	String s3 = "Hello";
                	String s4 = s1;
                	System.out.println(s1 == s2);//false
                 	System.out.println(s1 == s4);//true
                	System.out.println(s1 == s3);//false
                
                1. equals() 用与判断两字符串是否相等,相等返回true,否则false
                      
                        //因为Object类中的equals()方法是==实现的,完成不了String类的需求,
                        //所以String对equals()实现了重写
                        String s1 = new String("hello");
                        String s2 = new String("hello");
                        String s3 = "Hello";
                        String s4 = s1;
                        System.out.println(s1.equals(s2));//true
                       	System.out.println(s1.equals(s4));//true
                        System.out.println(s1.equals(s3));//false
                

                Java——String类

                3. compareTo() 按照字典序进行的比较,返回值是int

                        /*
                        * 比较的方式有一下两种:
                        * 1.先一个一个字符相比较,如果出现不同的字符,则返回差值
                        * 2.如果前x个字符相等,则返回两个字符串的长度差值
                        * */
                        String s1 = new String("abc");
                        String s2 = new String("abcdef");
                        String s3 = new String("abd");
                        String s4 = new String("abc");
                        
                        System.out.println(s1.compareTo(s2));//-3 (3-6)
                        System.out.println(s1.compareTo(s3));//-1
                        System.out.println(s1.compareTo(s4));//0
                
                1. compareToIgnoreCase() 与compareTo方法一样,但是忽略大小写
                        String s1 = new String("Abc");
                        String s2 = new String("aBcdef");
                        String s3 = new String("aBd");
                        String s4 = new String("ABc");
                        System.out.println(s1.compareToIgnoreCase(s2));//-3 (3-6)
                        System.out.println(s1.compareToIgnoreCase(s3));//-1
                        System.out.println(s1.compareToIgnoreCase(s4));//0
                

                3. 字符串查找

                方法功能
                char charAt(int index)返回index位置上字符,如果index为负数或者越界,抛出 IndexOutOfBoundsException异常
                int indexOf(int ch)返回ch第一次出现的位置,没有返回-1
                int indexOf(int ch, intfromIndex)从fromIndex位置开始找ch第一次出现的位置,有返回-1
                int indexOf(String str)返回str第一次出现的位置,没有返回-1
                int indexOf(String str, intfromIndex)从fromIndex位置开始找str第一次出现的位置,没有返回-1
                int lastIndexOf(int ch)从后往前找,返回ch第一次出现的位置,没有返回-1
                int lastIndexOf(int ch, intfromIndex)从fromIndex位置开始找,从后往前找ch第一次出现的位置,没有返回-1
                int lastIndexOf(String str)从后往前找,返回str第一次出现的位置,没有返回-1
                int lastIndexOf(String str, intfromIndex)从fromIndex位置开始找,从后往前找str第一次出现的位置,没有返回-1
                 public static void main(String[] args) {
                 
                        String s = "Hello, how are you today?";
                        System.out.println(s.charAt(2)); //l
                        System.out.println(s.indexOf('H')); //0
                        System.out.println(s.indexOf('l',2)); //从第二个开始找 2
                        System.out.println(s.indexOf("are")); //11
                        System.out.println(s.indexOf("are",12)); // 未找到-1
                        System.out.println(s.lastIndexOf('l')); //从后往前数 3
                        System.out.println(s.lastIndexOf('l',3));// 从第三个往后数 3
                        System.out.println(s.lastIndexOf("how"));// 7
                        System.out.println(s.lastIndexOf("how",6));// 未找到 -1
                    }
                

                4.转化

                1.数值和字符串的转换

                		String s1 = String.valueOf(1234);
                        String s2 = String.valueOf(12.34);
                        String s3 = String.valueOf(true);
                        String s4 = String.valueOf(new Student("Hanmeimei", 18));
                        System.out.println(s1);//1234 String
                        System.out.println(s2);//12.34 String
                        System.out.println(s3);//true String
                        System.out.println(s4);//Student@1b6d3586
                        System.out.println("=================================");
                        int data1 = Integer.parseInt("1234");
                        double data2 = Double.parseDouble("12.34");
                        System.out.println(data1);//1234
                        System.out.println(data2);//12.34
                

                2.大小写转换

                 		String s1 = "hello";
                        String s2 = "HELLO";
                        System.out.println(s1.toUpperCase());//HELLO
                        System.out.println(s1.toLowerCase());//hello
                

                3.字符串转字符数组及字符数组转字符串

                 		//字符串转字符数组
                        String s = "What can I say!";
                        char[] arr = s.toCharArray();
                        for (int i = 0; i  
                

                4.格式化

                		//格式化
                        String s = String.format("%d/%02d/%d",2024,07,10);
                        System.out.println(s);//2024/07/10
                

                5.字符串替换

                方法功能
                String replaceAll(String regex, String replacement)替换所有的指定内容
                String replaceFirst(String regex, String replacement)替换首个内容
                		String s = "What can I say say!";
                        System.out.println(s.replaceAll("say","look"));
                        System.out.println(s.replaceFirst("say","SAY"));
                        //What can I look look!
                        //What can I SAY say!
                

                6.字符串拆分

                方法功能
                String[] split(String regex)将字符串全部拆分
                String[] split(String regex, int limit)将字符串以指定的格式,拆分为limit组
                 		//字符串拆分
                        String s = "字 符 串 拆 分";
                        String[] str = s.split(" ");
                        for(String i : str) {
                            System.out.print(i+"|");
                        }
                        System.out.println();
                        String[] str2 = s.split(" ",2);
                        for(String i : str2) {
                            System.out.println(i);
                        }
                        
                        /*
                        * 输出:
                        字|符|串|拆|分|
                        字
                        符 串 拆 分
                        * */
                
                       /*
                       *拆分是特别常用的操作:
                       * 一定要重点掌握
                       *另外有些特殊字符(通配符)作为分割符可能无法正确切分, 需要加上转义.
                       * */
                       String s2 = "192.168.1.16" ;
                       String[] result = s2.split("\\.") ;
                       for(String i: result) {
                           System.out.println(i);
                       }
                       System.out.println("\\");
                       //为了匹配字面上的点号,你需要使用反斜杠(\)来转义它,
                       // 但在Java字符串中,反斜杠本身也是一个转义字符,
                       // 所以你需要使用双反斜杠(\\)来表示一个字面量上的反斜杠。
                       
                

                7. 字符串截取

                	 //字符串截取
                        String s = "What can I say!";
                        System.out.println(s.substring(6));//an I say!
                        System.out.println(s.substring(0,3));//What
                

                8.字符串去首尾空格

                	 String s = "   yy ds       ";
                        System.out.println(s.trim());//yy ds
                

                10.字符串修改

                String类是不能修改的,所有的修改都会创建新对象,效率不高。

                Java——String类

                这才10000 就341ms,如果要修改建议尽量使用StringBuffer或者StringBuilder。

                三、StringBuffer和StringBuilder

                因为String的不可更改特性,为了方便字符串的修改,Java中又提供StringBuilder和StringBuffer类。而且这两个类大部分的方法又是一样的。

                感兴趣的可以点下在线的文档

                Java——String类

                使用StringBuffer后1ms。

                Java——String类

                注意:String和StringBuilder类不能直接转换。如果要想互相转换,可以采用如下原则:

                • String变为StringBuilder: 利用StringBuilder的构造方法或append()方法
                • StringBuilder变为String: 调用toString()方法

                  String、StringBuffer、StringBuilder的区别

                  • String的内容不可修改,StringBuffer与StringBuilder的内容是可以修改的
                  • StringBuffer采用同步处理,属于线程安全操作;而 StringBuilder未采用同步处理,属于线程不安全操

                    所谓的线程安全,就像多人上厕所,此时就一间,你先进去了,关上门,完事后再出来。在这期间你独占这一间,谁也进不来。先完成当前的这件事,独占资源,完事再释放占有的资源。

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]