• java学习字符串讲解


    一、概述

    java.lang.String代表字符串。
    API中说:String类代表字符串。 Java程序中的所有字符串文字(例如"abc" )都被实现为此类的实例
    其实就是说:程序当中的双引号字符串,都是String类的对象。(就算没有new,也照样是)

    字符串特点:
    1、字符串的内容永不改变,是一个常量 【重点】
    2、字符串不可改变,所以字符串是可以共享使用
    3、字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组


    创建字符串的3+1种方式
    三种构造方法:
    public String():创建一个空白数组,不含任何内容;
    public String(char[] array):根据字符数组的内容,创建对应的字符串;
    public String(byte[] array):根据字节数组的内容,来创建对应的字符串

    一种直接创建
    String str = ""; // 右边直接双引号
    注意:直接写上双引号,就是字符串对象;
    public class Demo01String {
        public static void main(String[] args) {
            //使用空参数构造
            String str1 = new String(); // 小括号留空,说明字符串什么内容都没有
            System.out.println("第一个字符串:" + str1);
    
            //根据字符数组创建字符串
            char[] charArray = {'A', 'b', 'C'};
            String str2 = new String(charArray);
            System.out.println("第二个字符串:" + str2);
    
            // 根据字节数组来创建字符串
            byte[] byteArray = {97,98,99};
            String str3 = new String(byteArray);
            System.out.println("第三个字符串:" + str3);
    
            String str4 = "Hello";
            System.out.println("第四个字符串:" + str4);
    
        }
    
    }
    

      

    二、字符串常量池

    字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中, new的不在常量池当中。

    对于基本类型,==是进行数值的比较
    对于引用类型来说,==是进行【地址值】的比较
    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
    
    }
    

      

    字符串内存图

    三、字符串的比较

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

    1、public boolean equals(Object obj):参数可以是任何对象,只有参数时一个字符串并且内容完全相同时才会返回true,否则返回false
    注意事项
    (1).任何对象都能用Object进行接收;
    (2).equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样;
    (3).如果比较双方一个常量一个变量,推荐把常量写在前面, 推荐:"abc".equals(str) 不推荐:str.equals("abc"),因为如果变量str为null时,程序报错空指针异常NUllPointerException

    2、public boolean equalsIgnoreCase(String str):忽略大小写,进行内容比较。
    注意:
    只有英文字母忽略大小写,其他不区分大小写
    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
    
            System.out.println("================================");
    
            System.out.println(str1.equals(str2)); // true
            System.out.println(str2.equals(str3)); // true
            System.out.println(str3.equals("abc")); // true  不推荐,因为如果变量str3为null时,程序报错空指针异常NUllPointerException
            System.out.println("abc".equals(str1)); // true  推荐
    
            String str4 = "Abc";
            System.out.println(str1.equals(str4)); // false
    
            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("abc一123".equalsIgnoreCase("abc壹123")); // false
    
    
        }
    

      

    四、字符串的获取
    public int length() : 获取字符串当中含有的字符串支付个数,拿到字符串长度;
    public String concat(String str):将当前字符串和参数字符串拼接,返回新的字符串
    public char charAt(int index):获取指定索引位置的单个字符,索引从0开始;
    public int indexOf(String str):查找参数字符串在本字符串当中首次出现的位置索引,如果没有返回-1值

    String strC = "msuahbfcbgeunjdwunan";
    
            //获取长度
            int length = strC.length();
            System.out.println("字符串长度:" + length);
    
            //拼接字符串
            String strD = "57621964324";
            String strE = strC.concat(strD);
            System.out.println("拼接字符串:" + strE);
    
            //获取指定索引位置的单个字符
            char ch = strE.charAt(1);
            System.out.println("在1号索引位置的字符是:" + ch); //S
    
            // 查找参数字符串在本字符串当中首次出现的位置索引,如果没有返回-1值
            int index = strE.indexOf("hbf");
            System.out.println("第一次索引值是:" + index); // 4
            System.out.println(strE.indexOf("cdn"));  // -1
    

      

    五、字符串的截取
    public String substring(int index):截取从参数位置一直到字符串末尾,[index, ∞),返回新的字符串。
    public String substring(int begin, int end):截取从begin开始,一直到end结束,中间的字符串
    注意事项:
    [begin, end) 左闭右开,包含左边,不包含右边。
    String strF = strE.substring(5);
    String strG = strE.substring(5, 8);
    System.out.println(strF);
    System.out.println(strG);
    

     

    六、字符串变量地址值变换

    //下面这种写法,字符串的内容仍然没有改变
    //下面有两个字符串:"hello","java"
    //strA当中保存的是地址值。
    //本来地址值是hello的0x666,
    //后来地址值变成java的0x999
    String strA = "hello";
    System.out.println(strA);  // hello
    strA = "java";
    System.out.println(strA); // java
    

      

    七、字符串的转换

    常用方法

    public char[] toCharArray() : 将当前字符串拆分成字符数组作为返回值;

    public byte[] getBytes() : 获取当前字符串底层的字节数组;

    public String replace(CharSequence oldString, CharSequence newString):将所有出现的老字符串替换成新字符串,返回替换后的新字符串
    // 转换成字符数组
            char[] chars = strH.toCharArray();
            System.out.println(chars[2]);       // v
            System.out.println(chars.length);   // 4
            // 转换成字节数组
            byte[] bytes = strH.getBytes();
            for (int i = 0; i < bytes.length; i++) {
                System.out.println(bytes[i]);
            }
            // 替换
            String strJ = "会不会玩啊,你大爷的!你大爷的!你大爷的!";
            String strK = strJ.replace("你大爷的", "****");
            System.out.println(strJ);
            System.out.println(strK);
    

      

    八、分隔字符串

    public String[] split(String regex) :按照参数的规则,将字符串切分成若干部分
    注意事项:
    split方法的参数是一个正则表达式
    // 切割字符串
            String strL = "aaa,bbb,ccc,d";
            String[] array1 = strL.split(",");
            System.out.println(array1);
            for (int i = 0; i < array1.length; i++) {
                System.out.println(array1[i]);
            }
    
            String strM = "XXX.YYY.ZZZ";
            String[] array2 = strM.split("\\.");
            System.out.println(array2);
            for (int i = 0; i < array2.length; i++) {
                System.out.println(array2[i]);
            }
    

     

    九、练习

    1、指定整数数组格式{1,2,3},拼接字符串[word1#word2#word3]

    int[] numArray = {1,2,3};
    String result1 = fromArrayToString(numArray);
    System.out.println(result1);
    
    
    public static String fromArrayToString(int[] array)
    {
          String str = "[";
          for (int i = 0; i < array.length; i++) {
              str += "word" + array[i];
              if (i < array.length - 1) {
                  str += "#";
              }
          }
          str = str.concat("]");
          return str;
    }
    

      

    2、统计输入字符串各种字符的个数

    // 练习:统计输入的字符串各种字符的个数
            System.out.println("请输入字符串");
            Scanner sc = new Scanner(System.in);
            String strN = sc.next();
            System.out.println("你输入的是:" + strN);
            String strO = getStringCount(strN);
            System.out.println(strO);
    
    public static String getStringCount(String str)
        {
            int countUpper = 0;
            int countLower = 0;
            int countNumber = 0;
            int countOther = 0;
            char[] chars = str.toCharArray();
            for (int i = 0; i < chars.length; i++) {
                if ('A' <= chars[i] && chars[i] <= 'Z') {
                    countUpper++;
                } else if ('a' <= chars[i] && chars[i] <= 'z') {
                    countLower++;
                } else if ('0' <= chars[i] && chars[i] <= '9') {
                    countNumber++;
                } else {
                    countOther++;
                }
            }
            String result = "大写字母有:" + countUpper + "个;" + "小写字母有:" + countLower + "个;" + "数字有:" + countNumber + "个;" + "其他字符有:" + countOther + "个;";
            return result;
        }
    

      

     
     
     
  • 相关阅读:
    elasticsearch 不能通过9200端口访问
    elasticsearch 2.0+ 安装 Marvel
    修改es最大返回结果数
    ElasticSearch的Marvel更新license
    python-execjs(调用js)
    爬取豆瓣电影排名的代码以及思路
    docker的安装
    mysql主从同步
    Docker配置yapi接口
    第24课
  • 原文地址:https://www.cnblogs.com/zst062102/p/16119665.html
Copyright © 2020-2023  润新知