zoukankan      html  css  js  c++  java
  • String

    String概述

    String 类在 java.lang 包下,所以使用的时候不需要导包

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

    也就是说,Java*程序中所有的双引号字符串,都是String类的对象

    String类的特点

    • 字符串不可改变、它的值在创建后不可更改

    • 虽然值不可改变、但是值可以被共享使用

    注意:String这个类比较特殊, 打印其对象名的时候, 不会出现内存地址,而是该对象所记录的真实内容

    String类常见构造方法

    public String()                   // 创建一个空白字符串对象,不含任何内容
    public String(char[] chs)        // 根据字符数组的内容,来创建字符串对象
    public String(String original)  // 根据传入的字符串内容,来创建字符串对象
    public s = "abc"               // 直接赋值的方式创建字符串对象,内容就是abc
    

    String类构造方法创建字符串对象的特点

    构造方法每创建一次对象,都会在堆内存中开辟不同的对象空间,所以每new一次,都是不同的对象

    直接定义字符串变量的方式特点

    直接定义的字符串内容会存储到堆内存中的常量池里,字符串内容如果相同,则直接共享使用

    不同的比较情况

    public class Test1 {
        public static void main(String[] args) {
            String s1 = "abc";
            String s2 = "abc";
            System.out.println(s1 == s2);//运行结果为true
        }
    }
    
    public class Test2 {
        public static void main(String[] args) {
            String s1 = "abc";
            String s2 = new String("abc"); 
            System.out.println(s1 == s2);//运行结果为false
        }
    }
    
    public class Test3 {
        public static void main(String[] args) {
            String s1 = "abc";
            String s2 = "ab";
            String s3 = s2 + "c";
            System.out.println(s1 == s3);//运行结果为false
        }
    }
    

    当字符串之间使用 + 号串联(拼接)的时候,系统底层会自动创建一个StringBuilder对象,然后再调用其append方法完成拼接,拼接后,再调用其toString方法转换为String类型

    public class Test4 {
        public static void main(String[] args) {
            String s1 = "abc";
            String s2 = "a" + "b" + "c";
            System.out.println(s1 == s2);//运行结果为true
        }
    }
    

    Java存在常量优化机制,在编译的时候,就会将"a"、"b"、"c"拼接为 "abc"

    字符串的比较

    ==号的功能

    ==号如果比较的是基本数据类型,比较的是具体的值
    ==号如果比较的是引用数据类型,比较的是对象的地址值
    

    字符串内容比较

    equals(String s) : 比较字符串内容是否相同,严格区分大小写
    equalsIgnoreCase(String s) : 比较字符串内容是否相同,忽略大小写
    

    用户登录案例

       
    public static void main(String[] args) {
            String useName = "亚索";
            String password = "eqeqeqfr";
            for (int i = 1; i <= 3 ; i++) { // 设置3次机会
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入您的用户名");
                String scUseName = sc.nextLine();
                System.out.println("请输入您的密码");
                String scPassword = sc.nextLine();
                if (scUseName.equals(useName) && scPassword.equals(password)) {
                    System.out.println("登录成功"); // equals 比较字符串是否相同
                    break; // 登录成功后停止循环
                } else {
                    if (i==3) {
                        System.out.println("您的机会已用完,请明天再试");
                    } else {
                        System.out.println("登录失败,你还剩下"+(3-i)+"次机会");
                    }
                }
            }
        }
    

    字符串的遍历

    第一种方法

    public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入");
            String sChar = sc.nextLine();
            char[] chars = sChar.toCharArray();
            for (int i = 0; i < sChar.length(); i++) {
                System.out.println(chars[i]);
            }
        }
    

    第二种方法

    public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入");
            String sChar = sc.nextLine();
            for (int i = 0; i < sChar.length(); i++) {
                char ch = sChar.charAt(i);
                System.out.println(ch);
            }
        }
    }
    

    统计字符的个数

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入");
        String s = sc.nextLine();
        int bigCount = 0; // 定义三个计数器
        int smallCount = 0;
        int numCount = 0;
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) { // 遍历字符串
            char c = chars[i];
            if (c >= 'A' && c <= 'Z') {
                bigCount++;
            }else if(c >= 'a' && c <= 'z'){
                smallCount++;
            }else{
                numCount++;
            }
        }
        System.out.println("大写字母的个数为:"+bigCount);
        System.out.println("小写字母的个数为:"+smallCount);
        System.out.println("数字字母的个数为:"+numCount);
    }
    

    字符串截取(手机号屏蔽)

    public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入手机号:");
            String tel = sc.nextLine();
            String start = tel.substring(0, 3);//截取字符串前三位
            String end = tel.substring(7);//截取字符串最后四位
            System.out.println(start + "****" + end);
        }
    

    字符串替换(敏感词替换)

    public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入");
            String s = sc.nextLine();
            String result = s.replace("TMD", "***");
            System.out.println(result);
        }
    

    字符串切割

    public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入学生信息:"); // 张三 23
            String stu = sc.nextLine();
            String[] sArr = stu.split(",");
            System.out.println(sArr[0]);
            System.out.println(sArr[1]);
        }
    

    String方法小结

    public boolean equals(Object anObject) // 比较字符串的内容,严格区分大小写
    public boolean equalsIgnoreCase(String anotherString) // 比较字符串的内容,忽略大小写
        
    public int length() // 返回此字符串的长度
        
    public char charAt(int index) // 返回指定索引处的 char 值
    public char[] toCharArray() // 将字符串拆分为字符数组后返回
    
    public String substring(int beginIndex, int endIndex) // 根据开始和结束索引进行截取,得到新的字符串(包含头,不包含尾)
    public String substring(int beginIndex) // 从传入的索引处截取,截取到末尾,得到新的字符串
    
    public String replace(CharSequence target, CharSequence replacement) // 使用新值,将字符串中的旧值替换,得到新的字符串
    public String[] split(String regex) // 根据传入的规则切割字符串,得到字符串数组
    
  • 相关阅读:
    strongswan--HA
    RFC8221 -- 密码算法实现要求和使用指南
    strongswan--ikev2软件架构
    strongswan--ike sa状态机
    strongswan--ipsec.conf配置文件分析
    strongswan--linux内核ipsec policy类型
    strongswan--配置Charon-systemd问题解决
    strongswan——IKE建立过程
    GCC入门
    MPLS-TP OAM各个层次
  • 原文地址:https://www.cnblogs.com/tyrion4396/p/13356654.html
Copyright © 2011-2022 走看看