• java 15.String


    String

    java.lang.String

    String类代表字符串。 Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例。

    1. 字符串的内容永不变; 它们的值在创建后不能被更改。

    2. 因为String对象是不可变的,所以它们可以被共享。

    3. 字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组。

    创建字符串常见的3+1种方式

    创建一个空白字符串,不含任何内容

    public String()
    

    根据字符数组的内容,创建对应的字符串

    public String(char[] array)
    

    根据字节数组的内容,创建对应的字符串

    public String(byte[] array)
    

    一种直接创建

    String s = "Hello";
    

    示例代码

        public static void main(String[] args) {
            String s1 = new String();
            System.out.println("第一个字符串:"+s1);
    
            char[] charArray = {'A','B','C'};
            String s2 = new String(charArray);
            System.out.println("第二个字符串:"+s2);
    
            byte[] byteArray = {97,98,99};
            String s3 = new String(byteArray);
            System.out.println("第三个字符串:"+s3);
    
            String s4 = "hello";
            System.out.println("第四个字符串:"+s4);
        }
    

    字符串的常量池

    public class demo001 {
        public static void main(String[] args) {
            String s1 = "abc";
            String s2 = "abc";
    
            char[] charArray = {'a','b','c'};
            String s3 = new String(charArray);
    
            System.out.println(s1 == s2);  //true
            System.out.println(s1 == s3);  //false
            System.out.println(s2 == s3);  //false
        }
    
    }
    

    原理

    • 对于引用类型,==进行的是地址值的比较
    • 双引号直接写的字符串在常量池当中,new的不在常量池中
      在这里插入图片描述

    字符串内容的比较方法

    ==是进行对象的地址值比较,如果确实需要字符串的内容比较,可以使用两个方法:

    第一个

    //参数可以是任何对象,只有参数是一个字符串并且内容相同的才会给true,否则返回false
    public boolean equals(Object obj);
    

    备注

    1. 任何对象都能用object进行接收。

    2. equals方法据有对称性,也就是a.equals(b)和b.equals(a)效果一样

    3. 如果比较双方一个常量一个变量,推荐把常量字符串写在前面,比如:“abc”.equals(s3)

    public class demo001 {
        public static void main(String[] args) {
            String s1 = "abc";
            String s2 = "abc";
    
            char[] charArray = {'a','b','c'};
            String s3 = new String(charArray);
    
            System.out.println(s1.equals(s2));  //true
            System.out.println(s2.equals(s3));  //true
            System.out.println(s3.equals("abc"));  //true
            System.out.println("abc".equals(s3));  //true
        }
    
    }
    

    第二个

    //忽略大小写,进行内容比较
    public boolean equalsIgnoreCase(String str)
    
    public class demo001 {
        public static void main(String[] args) {
            String s1 = "abc123C d";
            String s2 = "ABC123c D";
    
            System.out.println(s1.equalsIgnoreCase(s2));  //true
            System.out.println("ABC123c D".equalsIgnoreCase(s1));  //true
        }
    }
    

    字符串的获取方法相关

    public int length();  //获取字符串长度
    public String concat(String str);  //将当前字符串和参数字符串拼接成为返回值的新字符串
    public char charAt(int index);  //获取索引位置的单个字符,索引从0开始
    public int indexOf(String str);  //查找参数字符串在本字符串中首次出现的索引位置,如果没有返回-1值
    
    public class demo001 {
        public static void main(String[] args) {
            String s1 = "hello hello hello ";
            String s2 = "world";
    
            System.out.println(s1.length());
            System.out.println(s1.concat(s2));
            System.out.println(s1.charAt(2));
            System.out.println(s1.indexOf("llo"));
            System.out.println(s1.indexOf("wor"));
        }
    }
    

    字符串截取

    //截取从参数位置一直到字符串末尾,返回新字符串
    public String substring(int index);  
    //截取从begin开始,一直到end结束,中间的字符串,不包含begin和end
    public String substring(int begin, int end)
    
    public class demo001 {
        public static void main(String[] args) {
            String s1 = "hello world";
            System.out.println(s1);  //hello world
            String s2 = s1.substring(5);
            System.out.println(s2);  //world
            String s3 = s1.substring(5,8);
            System.out.println(s3);  //wo
        }
    }
    

    字符串转换相关常用方法

    //将当前字符串拆分成为字符数组作为返回值
    public char[] toCharArray()
    //获得当前字符串底层的字节数组
    public byte[] getBytes()
    //将所有出现的老字符串替换成为新的字符串,返回替换后的结果新字符串
    //CharSequence意思就是说可以接收字符串类型
    public String replace(CharSequence oldString, CharSequence newString)    
    
    public class demo001 {
        public static void main(String[] args) {
            char[] chars = "Hello".toCharArray();
            System.out.println(chars[0]);  //chars可以作为数组来使用,否则String无法这样用
    
            byte[] bytes = "abc".getBytes();  //转换成字节数组来使用
            for (int i = 0; i < bytes.length; i++) {
                System.out.println(bytes[i]);  //97 98 99
            }
    
            String s1 = "How do you do?";
            String s2 = s1.replace("o","*");
            System.out.println(s2);  //H*w d* y*u d*?
        }
    }
    

    字符串分割

    //按照参数规则,将字符串切分为若干部分
    public String[] split(String regex)
    

    注意

    参数regex是正则表达式,所以如果按照点号.切割,必须转译,比如这样"\\."

    public class demo001 {
        public static void main(String[] args) {
            String ip = "192.168.172.55";
            String[] ips = ip.split("\\.");
            for(String i: ips){
                System.out.println(i);
            }
        }
    }
    

    练习题

    题目1

    定义一个方法,把数组{1,2,3}按照指定格式拼接成一个字符串,格式如下:[word1#word2#word3]

    public class demo001 {
        public static void main(String[] args) {
            String[] arr1 = {"user","password","token"};
            int[] arr2 = {192,168,1,10};
            String r1 = fromArrayToString(arr1);
            String r2 = fromArrayToString(arr2);
            System.out.println(r1);
            System.out.println(r2);
        }
    
        public static String fromArrayToString(String[] arr) {
            String result = "[";
            for (int i = 0; i < arr.length; i++) {
                if (i==arr.length-1){
                    result += arr[i] + "]";
                }else {
                    result += arr[i] + "#";
                }
            }
            return result;
        }
        //重载方法,支持int型数组入参
        public static String fromArrayToString(int[] arr) {
            String result = "[";
            for (int i = 0; i < arr.length; i++) {
                if (i==arr.length-1){
                    result += arr[i] + "]";
                }else {
                    result += arr[i] + "#";
                }
            }
            return result;
        }
    }
    

    题目2

    键盘输入一个字符串,并且统计其中各种字符出现的次数。

    种类有:大写字母、小写字母、数字、其他

    import java.util.Scanner;
    
    public class demo001 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入一个字符串");
            int counterUpper = 0; //大写字母
            int counterLower = 0; //小写字母
            int counterNumber = 0; //数字
            int counterOther = 0; //其他
            if(sc.hasNextLine()){
                String input = sc.nextLine();
                char[] chars = input.toCharArray();
                for (int i = 0; i < chars.length; i++) {
                    char ch = chars[i];
                    if ('A' <= ch && ch <= 'Z'){
                        counterUpper++;
                    }else if('a' <= ch && ch <= 'z'){
                        counterLower++;
                    }else if('0' <= ch && ch <= '9'){
                        counterNumber++;
                    }else {
                        counterOther++;
                    }
                }
            }
            sc.close();
            System.out.println("大写字母出现次数统计结果:" + counterUpper);
            System.out.println("小写字母出现次数统计结果:" + counterLower);
            System.out.println("数字出现次数统计结果:" + counterNumber);
            System.out.println("其他字符出现次数统计结果:" + counterOther);
        }
    }
    

    next() 与 nextLine() 区别

    next():

    • 1、一定要读取到有效字符后才可以结束输入。
    • 2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
    • 3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
    • next() 不能得到带有空格的字符串。

    nextLine():

    • 1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
    • 2、可以获得空白。

    注意:在读取前我们一般需要 使用 hasNext 与 hasNextLine 判断是否还有输入的数据

    import java.util.Scanner;
     
    public class ScannerDemo {
        public static void main(String[] args) {
            Scanner scan = new Scanner(System.in);
            // 从键盘接收数据
     
            // nextLine方式接收字符串
            System.out.println("nextLine方式接收:");
            // 判断是否还有输入
            if (scan.hasNextLine()) {
                //String str2 = scan.next();
                String str2 = scan.nextLine();
                System.out.println("输入的数据为:" + str2);
            }
            scan.close();
        }
    }
    
  • 相关阅读:
    显卡信息
    统一处理labelme标注的json文件名
    Qt窗口设置最大高度
    未定义av_image_get_buffer_size
    AVPixelFormat
    树结构系列开篇:聊聊如何学习树结构?
    PriorityQueue 是线性结构吗?90%的人都搞错了!
    硬核!史上最全的工厂模式文章,从零到一全面讲解!
    如何从分类层面,深入理解设计模式?
    程序员重构入门指南
  • 原文地址:https://www.cnblogs.com/kknote/p/16103419.html
Copyright © 2020-2023  润新知