最整洁的常用字符串String基础知识

类 String 基础知识

一、类 String 简单介绍

  类 Stringjava.lang包下的类,所以不需要导包就可以直接使用。String 类代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作为此类的实例实现。

  字符串是常量;它们的值在创建之后不能更改。StringBuffer(字符串缓冲区)支持可变的字符串。因为 String 对象是不可变的,所以可以共享。

  • 记住字符串的三个特点

    1. 字符串的内容永不可变

    2. 正是因为字符串不可改变,所以字符串是可以共享使用的。

    3. 字符串效果上相当于是 char[] 字符数组,但是底层原理是 byte[] 字节数组。

String 是类是一个对象,不是 java 的三类8种基本数据类型。

  • 基本数据类型

    1. 字符型:char

    2. 布尔型:boolean

    3. 数值型:byte、short、int、long、float、double

二、类 String 构造方法

  字符串的构造方法有很多,常见的是一种直接创建的方法和几种构造方法。其中 StringBuffer StringBuilder会在其他文中单独讨论。

  • 直接创建 String str = "Hello"; 右边直接用双引号

  • 常见构造方法

    1. String() :构造一个空。
    2. String(byte[] bytes) :用 byte 数组来构造字符串。
    3. String(char[] value):用 char 数组来构造字符串。
    4. String(String original) :用已存在的字符串来构造新的字符串。
    5. String(StringBuffer buffer) :用字符串缓冲区中的内容来构造新的字符串。
    6. String(StringBuilder builder) :用字符串生成器中的内容来构造新的字符串。
  • 代码示例演示

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);
        // 根据字节数组创建字符串
        byte[] byteArray = { 97, 98, 99 };
        String str3 = new String(byteArray);
        System.out.println("第3个字符串:" + str3);
        // 直接创建
        String str4 = "Hello";
        System.out.println("第4个字符串:" + str4);
    }
}
  • 代码运行结果
第1个字符串:
第2个字符串:ABC
第3个字符串:abc
第4个字符串:Hello

三、字符串常量池与 String 内容比较

3.1 字符串常量

  字符串常量池:程序当中直接写上的双引号字符串,就在字符串常量池中。在堆中存放 new 出来的内容。对于基本类型来说,==进行数值的比较。对于引用类型来说,== 是进行地址值的比较。

  • 代码示例演示
public class DemoString {

    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
    }
}
  • 内存图解
创建字符串时内存图解

  跟多内存相关的知识会在其他文中详细讲解,期待~

3.2 String 的内容比较

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

  • 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 De03_String内容比较 {

    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

        String str5 = null;
        System.out.println("abc".equals(str5));       // 推荐:false
        System.out.println(str5.equals("abc"));       // 不推荐:报错,空指针异常NullPointerException

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

四、类 String 常用方法

4.1 与获取相关的方法

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

    数组a的长度: a.length
    ArrayList集合b的长度: b.size()
    String对象c的长度: c.length()

  • 代码示例演示

class DomoString {
    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
    }
}

4.2 与截取相关的方法

  字符串的截取方法substring 函数。

  1. public String substring(int index):截取从参数位置一直到字符串末尾,返回新字符串。
  2. public String substring(int begin, int end):截取从begin开始,一直到end结束,中间的字符串。[begin,end),包含左边,不包含右边。
  • 代码示例演示
public class DemoString {
    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
    }
}

4.3 与转换相关的方法

  String 当中与转换相关的常用方法有:

  1. public char[] toCharArray():将当前字符串拆分成为字符数组作为返回值。
  2. public byte[] getBytes():获得当前字符串底层的字节数组
  3. public String replace(CharSequence oldString, CharSequence newString):将所有出现的老字符串替换成为新的字符串,返回替换之后的结果新字符串。(备注:CharSequence 意思就是说可以接受字符串类型。)
  • 代码示例演示
public class DemoString {
    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("==============");
        // 弹幕屏蔽
        String lang1 = "会不会玩儿呀!你大爷的!你大爷的!你大爷的!!!";
        String lang2 = lang1.replace("你大爷的", "****");
        System.out.println(lang2); // 会不会玩儿呀!****!****!****!!!
    }
}

4.4 与分割相关的方法

  String 当中与分割字符串方法:

  1. public String[] split(String regex):按照参数的规则,将字符串切分成为若干部分。
  • 注意

    1.split 方法的参数其实是一个“正则表达式”。其它文中探讨正则表达式。

    2.如果按照英文句点.”进行切分,必须写"\\."(两个反斜杠)

  • 代码示例演示

public class DemoString {
    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.print(array1[i] + " ");
        }
        System.out.println();
        String str2 = "aaa bbb ccc";
        String[] array2 = str2.split(" ");
        for (int i = 0; i < array2.length; i++) {
            System.out.print(array2[i] +" ");
        }
        System.out.println();
        String str3 = "XXX.YYY.ZZZ";
        String[] array3 = str3.split("\\.");
        for (int i = 0; i < array3.length; i++) {
            System.out.print(array3[i]+" ");
        }
    }
}
  • 代码运行结果
aaa bbb ccc 
aaa bbb ccc 
XXX YYY ZZZ 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ItDaChuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值