• Java基础-----String类


    1. String字符串类

    1.1 简介

    • String不是基本数据类型,是一种引用类型
    • String代表一组不可改变的Unicode字符序列。String类对象的内容一旦被初始化,不能再改变
    • String类是final修饰的终结类,不能产生子类
    public final class String
        implements java.io.Serializable, Comparable<String>, CharSequence {}
    
    • 1
    • 2

    1.2 创建String

    • 静态方式创建:String str=“abc”; 在方法区常量池中产生唯一一个字符串对象,如果有另外一个引用指向了相同的字符串,则两个引用变量的地址相同

    • 动态方式创建:String str=new String(“abc”);在堆内存中会产生一个不同的对象,会产生两个对象(堆和常量池中)

    String str="abc";//静态创建
    String str1=new String("abc");//动态创建
    System.out.println(str==str1);//false  
    System.out.println(str.equals(str1));//true
    
    • 1
    • 2
    • 3
    • 4

    1.3 构造方法

    • new String();
    • new String(“abc”);
    • new String(char类型数组);
    • new String(char类型数组,数组下标起始位置,取出数组的长度);
    • new String(byte类型数组);
    • new String(byte类型数组,数组下标起始位置,取出数组的长度);
    String str=new String("abc");
    String str1=new String();
    System.out.println(str1.length());//0
    
    • 1
    • 2
    • 3
    String str="adfhkjl";
    char[] chars = str.toCharArray();//将字符串转成字符串数组
    for (char c : chars) {
    	System.out.println(c);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    		char[] c={'a','b','c','d','e'};
            String str=new String(c);//将字符串数组转成字符串
            System.out.println(str);//abcde
    
    • 1
    • 2
    • 3
    		char[] c={'a','b','c','d','e'};
    		//new String(char类型数组,数组下标起始位置,取出数组的长度);
            //从c中索引为1的位置,选取三个作为一个字符串
            String str=new String(c,1,3);
            System.out.println(str);//bcd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    		byte[] b={65,66,67,68,69};
            String str=new String(b);
            System.out.println(str);//ABCDE
    
    • 1
    • 2
    • 3
    		byte[] b={65,66,67,68,69};
            String str=new String(b);
            //new String(byte类型数组,数组下标起始位置,取出数组的长度);
            String str1=new String(b,1,4);
            System.out.println(str);//ABCDE
            System.out.println(str1);//BCDE
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.4 连接操作符

    可以使用“+”作为连接符,任何的数据类型和字符串使用加号连在一起,最后都会变成字符串类型

    		String str="abc";
            str=str+"ccc"+12;
            System.out.println(str);//abcccc12
            str=12+30+str;
            System.out.println(str);//42abcccc12
    
    • 1
    • 2
    • 3
    • 4
    • 5
    		String str=null;
            str=str+"abc";
            System.out.println(str);//nullabc
    
    • 1
    • 2
    • 3
    String str="abc";
    String str1="def";
    String str2="abcdef";
    //变量相加,先开辟空间地址,再做拼接,再做比较
    System.out.println(str2==str+str1);//false
    System.out.println(str2.equals(str+str1));//true
    //先做拼接,abcdef,再去常量池中查找
    System.out.println(str2=="abc"+"def");//true   
    System.out.println(str2.equals("abc"+"def"));//true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    1.5 常用方法

    length()返回int类型的值,获取字符串长度
    equals(String)判断两个字符串中的字面量值是否相等
    equalsIgnoreCase(String)不区分大小写比较字面量值是否相等
    indexOf(String)查找给定值在字符串中第一次出现的下标位置。如果值不存在,则返回-1
    indexOf(String,int)查找给定值在字符串中给定索引位置开始,第一次出现的下标位置。如果值不存在,则返回-1
    lastIndexOf(String)查找给定值在字符串中最后一次出现的下标位置。如果值不存在,则返回-1
    lastIndexOf(String,int)查找给定值在字符串中给定索引位置开始,最后一次出现的下标位置。如果值不存在,则返回-1
    toUpperCase()将字符串中所有字符都转换为大写
    toLowerCase()将字符串中所有字符都转换为小写
    charAt(int)返回下标引处的char值
    String str="afasFEHSJKFH";
    System.out.println(str.length());//12
    
    • 1
    • 2
    String str="afasFEHSJKFH";
    String str1="afasFEHsjKFh";
    
    System.out.println(str.equals(str1));//false
    //equalsIgnoreCase(String):不区分大小写比较字面量值是否相等
    System.out.println(str.equalsIgnoreCase(str1));//true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    String str="afabcde";
    //**indexOf(String):查找给定值在字符串中第一次出现的下标位置
    int index = str.indexOf("a");
    int index1 = str.indexOf(99);
    int index2 = str.indexOf("abc");
    int index3 = str.indexOf("x");
    int index4 = str.indexOf("a", 1);//从下标位置为1的地方开始查找
    System.out.println(index);//0
    System.out.println(index1);//4   c的ASCII码是99
    System.out.println(index2);//2
    System.out.println(index3);//-1 如果值不存在,则返回-1
    System.out.println(index4);//2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    String str="afabcade";
    //lastIndexOf(String):返回指定子字符串最后一次出现的字符串中的索引
    int index = str.lastIndexOf("a");
    System.out.println(index);//5
    
    • 1
    • 2
    • 3
    • 4
    toUpperCase()将字符串中所有字符都转换为大写
    toLowerCase()将字符串中所有字符都转换为小写
    charAt(int)返回下标引处的char值
    String str="afABCade";
     String s = str.toUpperCase();//全部转成大写
     String s1=str.toLowerCase();//全部转成小写
     System.out.println(s);//AFABCADE
     System.out.println(s1);//afabcade
    
    • 1
    • 2
    • 3
    • 4
    • 5
    String str="afABCade";
    char c=str.charAt(3);//获取索引位置的字符
    System.out.println(c);//B
    
    • 1
    • 2
    • 3
    String str="afABCade";
    for(int i=0;i<str.length();i++){//获取整个字符串
        char c=str.charAt(i);
        System.out.print(c+"\t");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    substring(int)对字符串进行截取,从指定索引位置开始,一直截取到最后
    substring(int,int)对字符进行截取,从指定开始位置,截取到结束位置(不包含结束位置)
    String str="abcdEFGbcdf";
    String s=str.substring(3);//从下标为3的位置一直截取到最后
    System.out.println(s);//dEFGbcdf
    String s1=str.substring(3,6);//从下标为3的位置一直截取到下标为5的位置(不包括6这个位置)
    System.out.println(s1);//dEF
    
    • 1
    • 2
    • 3
    • 4
    • 5
    trim()将字符串前后空格去除(只能去除前后的空格,中间的空格无法去除)
    concat(String)字符串连接 和+实现相同的功能,如果字符串是null值不能使用,并且只能传字符串参数,其他类型不可以使用
    String str="     abcdEFGbcdf    ";
    String str1="123";
    //trim():将字符串前后空格去除(只能取出前后的空格,中间的空格无法去除)
    System.out.println(str.trim()+str1);//abcdEFGbcdf123
    //concat(String):字符串连接  和+实现相同的功能
    System.out.println(str.trim().concat(str1));//abcdEFGbcdf123
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    String str="abc";
    String str1=null;
    System.out.println(str.concat(str1));//报空指针异常
    System.out.println(str1.concat(str));//报空指针异常
    Integer x=123;
    System.out.println(str+x);//abc123
    //concat(String):只能传字符串参数,其他类型不可以使用
    System.out.println(str.concat(x));//报错
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    getBytes()将字符串转换成byte数组
    toCharArray()将字符串转换成char数组
    String str="abc";
    byte[] bytes = str.getBytes();
    for (byte b : bytes) {
        System.out.println(b);//97  98  99
    }
    char[] chars = str.toCharArray();
    System.out.println(chars);//abc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    contains(String)判断在字符串是否包含给定值,返回boolean类型值
    startsWith(String)判断字符串是否以给定值作为开始
    startsWith(String,int)判断字符串从索引位置,是否以给定值作为开始
    endsWith(String)判断字符串是否以给定值作为结束
    String str="abcdef";
    boolean ab = str.startsWith("ab");//判断字符串str是否以ab作为开始
    System.out.println("ab = " + ab);//ab = true
    boolean ax = str.startsWith("ax");
    System.out.println("ax = " + ax);//ax = false
    boolean ab1 = str.startsWith("ab", 1);//判断在下标位置为1的地方,是否以ab作为开始
    System.out.println("ab1 = " + ab1);//ab1 = false
    boolean ab2 = str.startsWith("ab", 0);
    System.out.println("ab2 = " + ab2);//ab2 = true
    boolean ef = str.endsWith("ef");
    System.out.println("ef = " + ef);//ef = true
    boolean e = str.endsWith("e");
    System.out.println("e = " + e);//e = false
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    replace(char,char)对字符串制定字符,使用新的字符进行替换
    String str="abcdabef";
    String s = str.replace("c", "e");
    System.out.println("s = " + s);//s = abedabef
    String s1 = str.replace("ab", "xx");
    System.out.println("s1 = " + s1);//s1 = xxcdxxef
    System.out.println("s1 = " + s1);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.6 案列

    1.6.1 检验邮箱地址是否正确

    要求:从键盘接收一个email地址,对email地址判断是否是正确的邮箱地址,要求:
    1.要求必须有@ 2.只能有一个@ 3.必须有点 . 4.点不能挨着@ 5.点不能是最后一位

    思路:
    有且只有一个@:找出@的第一个出现的位置和最后出现的位置,比较两者是否相等。
    点不能挨着@:点的位置 > @的位置+1
    点不能是最后一位:点的位置 < 字符串的长度-1

    public class checkEmail {
        public static void main(String[] args) {
            Scanner scanner=new Scanner(System.in);
            while (true){
                System.out.println("请输入email地址:");
                String email=scanner.next();
                boolean b=check(email);
                if(b){
                    System.out.println("有效的email地址");
                    break;
                }else {
                    System.out.println("无效的email地址");
                }
            }
    
        }
    //有且只有一个@:找出@的第一个出现的位置和最后出现的位置,比较两者是否相等。
    //点不能挨着@:点的位置 > @的位置+1
    //点不能是最后一位:点的位置 < 字符串的长度-1
        public static boolean check(String string){
            int a = string.indexOf("@");//@的第一个出现的位置
            int b = string.lastIndexOf("@");//@最后出现的位置
            int c = string.indexOf(".");//点出现的位置
            return a!=-1 && a==b && c>a+1 && c<string.length()-1;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    1.6.2 比较验证码

    生成从a~z A~Z 0~9之间,获取4个值作为一个验证码,从键盘接收一个验证码,做不区分大小写比较。

    public class CheckCode {
        public static void main(String[] args) {
            Scanner scanner=new Scanner(System.in);
            System.out.println("请输入验证码的长度:");
            int length=scanner.nextInt();
            String code=getCode(length);//自动生成的验证码
            System.out.println(code);
            System.out.println("请输入验证码:");
            String code1=scanner.next();//从键盘接收的验证码
           
            System.out.println(code.equalsIgnoreCase(code1)?"验证码正确":"验证码错误");
        }
        /**
         * 生成从a~z A~Z 0~9之间,获取4个值作为一个验证码
         * @param length  验证码的长度
         * @return        返回验证码
         */
        public static String getCode(int length){
            String z="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            String code="";//最后生成的验证码
            for(int i=1;i<=length;i++){
                int x=(int)(Math.random()*z.length());//生成随机数([0~字符串的长度)),此随机数作为验证码字符的下标位置
                code=code+z.charAt(x);//获取到的字符连接在一起
            }
            return code;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
  • 相关阅读:
    MySQL同步数据到Elasticsearch
    CKAN教程之在 Mac 上运行 dockerized CKAN 充分利用世界领先的数据门户实践指南
    763. Partition Labels
    【SpringBoot】内容协商机制
    【编程题】【Scratch三级】2022.06 古堡历险记
    Python 代码学习
    Kubeadm搭建kubernetes集群
    打开算法之门
    腾讯云服务器镜像TencentOS Server操作系统详细介绍
    ReactNative学习笔记
  • 原文地址:https://blog.csdn.net/qq_41994691/article/details/134515309