String类---相关操作

String类—相关操作

  • 创建字符串的方法

    package cn.xiaoge.day08.demo01;
    
    /*
    java.lang.String类代表字符串.
    API当中说: Java程序中的所有字符串字面值(如 "abc")都作为此类的实例实现.
    其实就是说: 程序当中所有的双引号字符串, 都是String类的对象. (就算没有new, 也照样是.)
    
    字符串的特点:
    1. 字符串的内容永不可变. [重点]
    2. 正式因为字符串不可改变, 所以字符串是可以共享使用的.
    3. 字符串效果上相当于char[]字符数组, 但是底层原理是byte[]字节数组.
    
    创建字符串的常见3+1种方式.
    三种构造方法:
    public String():  创建一个空白字符串, 不含有任何内容.
    public String(char[] array): 根据字符数组的内容, 来创建对应的字符串.
    public String(byte[] array): 根据字节数组的内容, 来创建对应的字符串.
    一种直接创建: String str = "Hello"; // 右边直接用双引号
    
    注意: 直接写上双引号, 就是字符串对象.
     */
    
    public class Demo01String {
        public static void main(String[] args) {
            // 使用空参构造
            String str1 = new String(); // 小括号留空, 说明字符串什么内容都没有
            System.out.println("第1个字符串: " + str1); // 空
    
            // 根据字符数组创建字符串
            char[] charArrays = {'A', 'B', 'C'};
            String str2 = new String(charArrays);
            System.out.println("第2个字符串: " + str2);  // ABC
    
            // 根据字节数组创建字符串
            byte[] byteArrays = {97, 98, 99};
            String str3 = new String(byteArrays);
            System.out.println("第3个字符串: " + str3);  // abc(数字转换成字符)
    
            // 直接创建
            String str4 = "Hello";
            System.out.println("第4个字符串: " + str4);  // Hello
        }
    }
    
    // 运行结果1个字符串:2个字符串: ABC
    第3个字符串: abc
    第4个字符串: Hello
    
  • ==比较字符串

    package cn.xiaoge.day08.demo01;
    
    /*
    字符串常量池: 程序当中直接写上的双引号字符串, 就在字符串常量池中 new的不在池当中.
    
    对于引用类型来说, ==是进行[地址值]的比较.
     */
    
    public class Demo02StringPool {
        public static void main(String[] args) {
            String str1 = "abc";
            String str2 = "abc";
    
            char[] charArray = {'a', 'b', 'c'};
            String str3 = new String(charArray);
    
            System.out.println(str1 == str2);  // true
            System.out.println(str1 == str3);  // false
            System.out.println(str2 == str3);  // false
    
        }
    }
    
    // 运行结果
    true
    false
    false
    
  • 字符串值比较方法equals和忽略大小写比较方法equalsIgnoreCase

    package cn.xiaoge.day08.demo02;
    
    /*
    ==是进行对象的地址值比较, 如果确实需要字符串的内容比较, 可以使用两个方法
    
    public boolean equals(Object obj): 参数可以是任何对象, 只要参数是一个字符串并且内容相同的才会给true; 否则返回值是一个false.
    
    注意事项:
    1. 任何对象都能用Object进行接收.
    2. equals方法具备对称性, 也就是a.equals(b)和b.equals(a)效果一样.
    3. 如果比较双方一个常量一个变量, 推荐把常量字符串写在前面.
    推荐: "abc".equals(str)   不推荐: str.equals("abc")
    
    public boolean equalsIgnoreCase(String str): 忽略大小写, 进行内容的比较
     */
    
    public class Demo01StringEquals {
        public static void main(String[] args) {
            String str1 = "Hello";
            String str2 = "Hello";
            char[] charArray = {'H', 'e', 'l', 'l', 'o'};
            String str3 = new String(charArray);
    
            System.out.println(str1 == str2); // true  ""引起来的字符串都在常量池中, 而str1 str2都是赋值Hello所以共享了, 所以地址相同(==引用类型比较的是地址类型)
            System.out.println(str1 == str3); // false
            System.out.println(str2 == str3); // false
            System.out.println("=============================");
    
            System.out.println(str1.equals(str2)); // true
            // equals比较字符串内容是否相等
            System.out.println(str1.equals(str3)); // true  str1和str3的内容相同
            System.out.println(str1.equals("Hello")); // true
            System.out.println("Hello".equals(str1)); // true
            System.out.println("=============================");
    
            String str4 = "hello";
            System.out.println(str4.equals(str1)); // false
            System.out.println("=============================");
    
            String str5 = null;
            System.out.println("abc".equals(str5)); // 推荐:  false
            // System.out.println(str5.equals("abc")); // 不推荐: 报错, 空指针异常NullPointerException
            System.out.println("=============================");
    
            String strA = "Java";
            String strB = "java";
            System.out.println(strA.equals(strB));  // false, 严格区分大小写
            System.out.println(strA.equalsIgnoreCase(strB)); // true 忽略大小写
            System.out.println("=============================");
    
            // 注意, 只有英文字母区分大小写, 其他都不区分大小写
            System.out.println("abc一123".equalsIgnoreCase("abc壹123")); // false
        }
    }
    
    // 运行结果
    true
    false
    false
    =============================
    true
    true
    true
    true
    =============================
    false
    =============================
    false
    =============================
    false
    true
    =============================
    false
    
  • 字符串常用方法–length–concat–charAt–indexOf

    package cn.xiaoge.day08.demo02;
    
    /*
    String当中与获取相关的常用方法有:
    
    public int length(): 获取字符串当中含有的字符个数, 拿到字符串长度.
    public String concat(String str): 将当前字符串和参数字符串拼接成为返回值新的字符串.
    public char charAt(int index): 获取指定索引位置的单个字符. (索引从0开始)
    public int indexOf(String str): 查找参数字符串在本字符串当中首次出现的索引位置, 如果没有返回-1值.
     */
    
    public class Demo02StringGet {
        public static void main(String[] args) {
            // 获取字符串的长度
            int length = "awwdawfawfawgf".length();
            System.out.println("字符串的长度是: " + length);
            System.out.println("=========================");
    
            // 拼接字符串
            String str1 = "Hello";
            String str2 = "World";
            String str3 = str1.concat(str2);
            System.out.println(str1); // Hello          原封不动
            System.out.println(str2); // World          原封不动
            System.out.println(str3); // HelloWorld     新的字符串
            System.out.println("=========================");
    
            // 获取指定索引位置的单个字符
            char ch = "Hello".charAt(1);
            System.out.println("在1号索引位置的是: " + ch); // 在1号索引位置的是: e
            System.out.println("=========================");
    
            // 查找参数字符串在本来字符串当中出现的第一次索引位置
            // 如果根本没有, 返回-1值.
            String original = "HelloWorldHelloWorld";
            int index = original.indexOf("llo");
            System.out.println("第1次索引值是: " + index); // 2
    
            System.out.println("HelloWorld".indexOf("all")); // -1
            System.out.println("=========================");
        }
    }
    
    // 运行结果
    字符串的长度是: 14
    =========================
    Hello
    World
    HelloWorld
    =========================1号索引位置的是: e
    =========================1次索引值是: 2
    -1
    =========================
    
  • 字符串截取–substring

    package cn.xiaoge.day08.demo02;
    
    /*
    字符串的截取方法:
    
    public String substring(int index): 截取从参数位置一直到字符串末尾, 返回新字符串.
    public String substring(int begin, int end): 截取从begin开始, 一直到end结束, 中间的字符串.
    备注:[begin, end), 包含左边, 不包含右边.
     */
    
    public class Demo03Substring {
        public static void main(String[] args) {
            String str1 = "HelloWorld";
            // 截取从参数位置一直到字符串末尾, 返回新字符串.
            String str2 = str1.substring(5);
            System.out.println(str1); // HelloWorld  原封不懂
            System.out.println(str2); // World       新字符串
            System.out.println("=========================");
    
            // 截取从begin开始, 一直到end结束, 中间的字符串.
            String str3 = str1.substring(4, 7); // 包含左边, 不包含右边.
            System.out.println(str3); // oWo
            System.out.println("=========================");
    
            // 下面这种写法, 字符串的内容仍然是没有改变的
            // 下面有两个字符串: "Hello", "World"
            // strA当中保存的是地址值.
            // 本来地址值是Hello的0x666
            // 后来地址值变成了Java的0x999
            String strA = "Hello";  // strA 指向常量池里的 "Hello"
            System.out.println(strA); // Hello
            strA = "Java";  // strA 指向常量池里的 "Java"  指向发生了改变 学过C的都应该知道指针吧
            System.out.println(strA); // Java
        }
    }
    
    // 运行结果
    HelloWorld
    World
    =========================
    oWo
    =========================
    Hello
    Java
    
  • 字符串转换常用方法

    package cn.xiaoge.day08.demo02;
    
    /*
    String当中与转换相关的常用方法有:
    
    public char[] toCharArray(): 将当前字符串拆分成为字符数组作为返回值.
    
    public byte[] getBytes():  获得当前字符串底层的字节数组.
    
    public String replace(CharSequence oldString, CharSequence newString):
    将所有出现的老字符串替换成为新的字符串, 返回替换之后的结果新字符串.
    备注: CharSequence意思就是可以接收字符串类型.
     */
    
    public class Demo04StringConvert {
        public static void main(String[] args) {
            char[] chars = "Hello".toCharArray();
            System.out.println(chars[0]); // H
            System.out.println("字符数组的长度为: " + chars.length); // 5
            System.out.println("=========================");
    
            // 转换成为字节数组
            byte[] bytes = "abc".getBytes();
            for (int i = 0; i < bytes.length; i++) {
                System.out.print(bytes[i] + " ");
            }
            System.out.println("");
            System.out.println("=========================");
    
            // 进行字符串的内容替换
            String str = "How do you do?";
            String str2 = str.replace("o", "*");
            System.out.println(str);  // How do you do?
            System.out.println(str2); // H*w d* y*u d*?
            System.out.println("=========================");
    
            // 游戏里骂人的**是这么来的
            String lang1 = "会不会玩呀! 你大爷的! 你大爷的! 你大爷的!";
            String lang2 = lang1.replace("你大爷的", "****");
            System.out.println(lang2); // 会不会玩呀! ****! ****! ****!
        }
    }
    
    // 运行结果
    H
    字符数组的长度为: 5
    =========================
    97 98 99 
    =========================
    How do you do?
    H*w d* y*u d*?
    =========================
    会不会玩呀! ****! ****! ****!
    
  • 字符串分割

    package cn.xiaoge.day08.demo02;
    
    /*
    分割字符串的方法:
    public String[] split(String regex): 按照参数的规则, 将字符串切分成为若干部分
    
    注意事项:
    split的参数启示是一个"正则表达式".
    今天注意:如果按照英文句点"."进行切割, 必须写"\\."(两个反斜杠)
     */
    
    public class Demo05StringSplit {
        public static void main(String[] args) {
            String str1 = "aaa,bbb,ccc";
            String[] array1 = str1.split(",");
            for (int i = 0; i <array1.length ; i++) {
                System.out.println(array1[i]);
            }
            System.out.println("=======================");
    
            String str2 = "aaa bbb ccc";
            String[] array2 = str2.split(" ");
            for (int i = 0; i <array2.length ; i++) {
                System.out.println(array2[i]);
            }
            System.out.println("=======================");
    
            String str3 = "zzz.yyy.xxx";
            String[] array3 = str3.split("\\.");
            System.out.println(array3.length); // 3
            for (int i = 0; i <array3.length ; i++) {
                System.out.println(array3[i]);
            }
            System.out.println("=======================");
        }
    }
    
    // 运行结果
    aaa
    bbb
    ccc
    =======================
    aaa
    bbb
    ccc
    =======================
    3
    zzz
    yyy
    xxx
    =======================
    
  • 字符串练习1

    package cn.xiaoge.day08.demo02;
    
    /*
    题目:
    定义一个方法: 把数组{1, 2, 3}按照指定格式拼接成一个字符串. 格式参照如下: [word1#word2#word3].
    
    分析:
    1. 首先准备一个int[]数组, 内容是: 1 2 3
    2. 定义一个方法, 用来将数组变成字符串
    三要素
    返回值类型: String
    方法名称: fromArrayToString
    参数列表: int[]
    3. 格式: [word1#word2#word3]
    用到: for循环, 字符串拼接, 每个数组 元素之前都要有一个word字样, 分割使用的是#, 区分一下是不是最后一个
    4. 调用方法, 得到返回值, 并打印结果字符串
     */
    
    public class Demo06StringPractise {
        public static void main(String[] args) {
            int[] array = {1, 2, 3};
            String result = fromArrayToString(array);
            System.out.println(result);
        }
    
        public static String fromArrayToString(int[] array) {
            String str1 = "[";
            for (int i = 0; i < array.length; i++) {
                if (array.length - 1 == i){
                    str1 += "word" + array[i] + "]";
                    break;
                }
                str1 += "word" + array[i] + "#";
            }
            return str1;
        }
    }
    
    // 运行结果
    [word1#word2#word3]
    
  • 字符串练习2

    package cn.xiaoge.day08.demo02;
    
    /*
    题目:
    要求你键盘输入一个字符串, 并且统计其中各种字符出现的次数.
    种类有: 大写字母, 小写字母, 数字, 其他
     */
    
    import java.util.Scanner;
    
    public class Demo07StringCont {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            System.out.println("please input a string:");
            String str = sc.next();
    
            int countUpper = 0;  // 大写字母
            int countLower = 0;  // 小写字母
            int countNumber = 0; // 数字
            int countOther = 0;   // 其他
    
            // 把字符串转换成字符数组
            char[] charArray = str.toCharArray();
            for (int i = 0; i < charArray.length; i++) {
                if ('A' <= charArray[i] && 'Z' >= charArray[i]){
                    countUpper++;
                } else if ('a' <= charArray[i] && 'z' >= charArray[i]) {
                    countLower++;
                } else if ('0' <= charArray[i] && '9' >= charArray[i]) {
                    countNumber++;
                } else {
                    countOther++;
                }
            }
    
            System.out.println("大写字母个数有:" + countUpper + "个.");
            System.out.println("小写字母个数有:" + countLower + "个.");
            System.out.println("数字个数有:" + countNumber + "个.");
            System.out.println("其他个数有:" + countOther + "个.");
        }
    }
    
    // 运行结果
    please input a string:
    wahufaufwEIPSGFISG12414515!@#$%^&
    大写字母个数有:9.
    小写字母个数有:9.
    数字个数有:8.
    其他个数有:7.
    
发布了275 篇原创文章 · 获赞 89 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/zsx1314lovezyf/article/details/102701802