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;
    }

  

 

 
 
 

 

posted @ 2022-04-08 20:44  坏小子1993  阅读(76)  评论(0编辑  收藏  举报