【Java】Java学习(九)—— String类

上一篇: Java学习(八)—— 三个常用的类(Scanner,Random,ArrayList)

第二十一部分 String类

21.1 概述

  • 概述: java.lang.String 类代表字符串。Java程序中所有的字符串文字(例如 “abc” )都可以被看作是实现此类的实例。程序当中所有的双引号字符串,都是String类的对象。

  • 特点:

    • 字符串的值在创建后不能被更改。
    • 因为String对象是不可变的,所以它们可以被共享。
    • 字符串效果上相当于是char[]字符数组,但是底层原理是byte[]字节数组。

21.2 创建字符串的常见3+1种方式

  • 三种构造方法
    • public String() :初始化新创建的String对象,以使其表示空字符序列。
    • public String(char[] array) :通过当前参数中的字符数组来构造新的String。
    • public String(byte[] array):通过使用平台的默认字符集解码当前参数中的字节数组来构造新的String。
  • 一种直接创建String str = "Hello";
public class DemoString {

    public static void main(String[] args) {
        // 使用空参构造
        String str1 = new String(); // 小括号留空,说明字符串什么内容都没有。
        System.out.println("第1个字符串:" + str1);

        // 根据字符数组创建字符串
        char[] charArray = { 'A', 'B', 'C' };
        String str2 = new String(charArray);
        System.out.println("第2个字符串:" + str2);	// ABC

        // 根据字节数组创建字符串
        byte[] byteArray = { 97, 98, 99 };
        String str3 = new String(byteArray);
        System.out.println("第3个字符串:" + str3);	// abc

        // 直接创建
        String str4 = "Hello";
        System.out.println("第4个字符串:" + str4);
    }

}

21.3 字符串的常量池

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

  • 对于基本类型来说,== 是进行数值的比较;
    对于引用类型来说,== 是进行地址值的比较。

public class StringPool {

    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
    }

}

在这里插入图片描述

21.4 字符串比较

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

  • public boolean equals(Object obj):将此字符串与指定对象进行比较。只有参数是一个字符串并且内容相同的才会给true;否则返回false。

    • 任何对象都能用Object(” 对象”的意思,也是一种引用类型)进行接收。
    • equals方法具有对称性,也就是a.equals(b)和b.equals(a)效果一样。
    • 如果比较双方一个常量一个变量,推荐把常量字符串写在前面。
      推荐:“abc”.equals(str) 不推荐:str.equals(“abc”)
  • public boolean equalsIgnoreCase(String str):忽略大小写,进行内容比较。

public class StringEquals {

    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.equals(str2)); // true
        System.out.println(str2.equals(str3)); // true
        System.out.println(str3.equals("Hello")); // true
        System.out.println("Hello".equals(str1)); // true

        String str4 = "hello";
        System.out.println(str1.equals(str4)); // false
        System.out.println("=================");

        String str5 = null;
        System.out.println("abc".equals(str5)); // 推荐:返回false
				// System.out.println(str5.equals("abc")); // 不推荐:报错,空指针异常
        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
    }

}

21.5 字符串获取

  • public int length():返回此字符串的长度。
  • public String concat (String str) :将指定的字符串连接到该字符串的末尾,返回新的字符串。
  • public char charAt (int index) :返回指定索引处的char值。
  • public int indexOf (String str) :返回指定子字符串第一次出现在该字符串内的索引,如果没有返回-1值。
public class Demo02StringGet {

    public static void main(String[] args) {
        // 获取字符串的长度
        int length = "asdasfeutrvauevbueyvb".length();
        System.out.println("字符串的长度是:" + length);

        // 拼接字符串
        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);
        System.out.println("==============");

        // 查找参数字符串在本来字符串当中出现的第一次索引位置
        // 如果根本没有,返回-1值
        String original = "HelloWorldHelloWorld";
        int index = original.indexOf("llo");
        System.out.println("第一次索引值是:" + index); // 2

        System.out.println("HelloWorld".indexOf("abc")); // -1
    }

}

21.6 字符串截取

  • public String substring(int index):截取从参数位置一直到字符串末尾,返回新字符串。
  • public String substring(int begin, int end):截取从begin开始,一直到end结束中间的字符串。[begin,end),包含左边,不包含右边。
public class DemoSubstring {

    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("================");

        String str3 = str1.substring(4, 7);
        System.out.println(str3); // oWo
        System.out.println("================");

        // 下面这种写法,字符串的内容仍然是没有改变的
        // strA当中保存的是地址值,只是地址值发生了改变
        String strA = "Hello";
        System.out.println(strA); // Hello
        strA = "Java";
        System.out.println(strA); // Java
    }

}

21.7 字符串转换

  • public char[] toCharArray():将当前字符串拆分成为字符数组作为返回值。
  • public byte[] getBytes():获得当前字符串底层的字节数组。
  • public String replace(CharSequence oldString, CharSequence newString):将所有出现的老字符串替换成为新的字符串,返回替换之后的新字符串。CharSequence意思是说可以接受字符串类。
public class StringConvert {

    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.println(bytes[i]);
        }
        System.out.println("==============");

        // 字符串的内容替换
        String str1 = "How do you do?";
        String str2 = str1.replace("o", "*");
        System.out.println(str1); // How do you do?
        System.out.println(str2); // H*w d* y*u d*?
        System.out.println("==============");

    }

}

21.8 字符串分割

  • public String[] split(String regex) :将此字符串按照给定的regex(正则表达式)拆分为字符串数组。
public class StringSplit {

    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 = "XXX.YYY.ZZZ";
        String[] array3 = str3.split("\\.");	// 需要用到正则表达式,不能直接写"."
        System.out.println(array3.length);
        for (int i = 0; i < array3.length; i++) {
            System.out.println(array3[i]);
        }
    }

}

21.9 练习

键盘输入一个字符串,并且统计其中各种字符出现的次数。种类有:大写字母、小写字母、数字、其他

import java.util.Scanner;
public class StringCount {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String input = sc.next(); // 获取键盘输入的一个字符串

        int countUpper = 0; // 大写字母
        int countLower = 0; // 小写字母
        int countNumber = 0; // 数字
        int countOther = 0; // 其他字符

        char[] charArray = input.toCharArray();
        for (int i = 0; i < charArray.length; i++) {
            char ch = charArray[i]; // 当前单个字符
            if ('A' <= ch && ch <= 'Z') {
                countUpper++;
            } else if ('a' <= ch && ch <= 'z') {
                countLower++;
            } else if ('0' <= ch && ch <= '9') {
                countNumber++;
            } else {
                countOther++;
            }
        }

        System.out.println("大写字母有:" + countUpper);
        System.out.println("小写字母有:" + countLower);
        System.out.println("数字有:" + countNumber);
        System.out.println("其他字符有:" + countOther);
    }

}

上一篇: Java学习(八)—— 三个常用的类(Scanner,Random,ArrayList)
下一篇: Java学习(十)—— static关键字

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值