Java String 类

Java String 类常用方法详解

在 Java 编程里,字符串操作十分常见,而 String 类作为 Java 标准库的核心类,用于表示不可变的字符序列。任何对字符串的修改操作都会返回一个新的字符串对象,不会改变原始字符串。本文将详细介绍 String 类的常用方法,并结合示例代码帮助理解。

一、String 对象的创建

String 对象的创建主要有以下两种方式:

1. 直接赋值

这是最常见的创建字符串的方式,使用双引号将一系列字符括起来即可:

java 复制代码
String str1 = "Hello, ";

2. 使用 new 关键字

通过对象实例化的方式,将需要创建的字符串作为构造参数传入:

java 复制代码
String str2 = new String("Hello, Java");

若调用 String 类的无参构造方法,则会创建一个空字符串,不过这种方式很少使用:

java 复制代码
String str3 = new String();

二、获取字符串长度

可以使用 length() 方法来获取字符串的长度,示例代码如下:

java 复制代码
public class StringMethod1 {
    public static void main(String[] args) {
        String str = "hello world!";
        int length = str.length();
        System.out.println("str的长度为:" + length);
    }
}

运行结果:

str的长度为:12

需要注意的是,字符串中的空格也算一个字符。

三、字符串查找

1. 获取指定位置字符

使用 char charAt(int index) 方法可以获取字符串指定位置的字符,索引下标从 0 开始。示例如下:

java 复制代码
public class StringMethod2 {
    public static void main(String[] args) {
        String str = "I love Java";
        char c = str.charAt(7);
        System.out.println("索引位置为7的字符为:" + c);
    }
}

运行结果:

索引位置为7的字符为:J

2. 查找字符串位置

  • indexOf():获取字符或子串在字符串中第一次出现的位置。
  • lastIndexOf():获取字符或子串在字符串中最后一次出现的位置。

示例代码如下:

java 复制代码
public class StringMethod2 {
    public static void main(String[] args) {
        String str = "I love Java, I love imooc!";
        // 获取字符在字符串中第一次出现的位置
        int i1 = str.indexOf('a');
        System.out.println("字符a在字符串str第一次出现的位置为:" + i1);

        // 获取子串在字符串中第一次出现的位置
        int i2 = str.indexOf("love");
        System.out.println("子串love在字符串str第一次出现的位置为:" + i2);

        // 获取字符在字符串中最后一次出现的位置
        int i3 = str.lastIndexOf('e');
        System.out.println("字符e在字符串str最后一次出现的位置为:" + i3);

        // 获取子串在字符串中最后一次出现的位置
        int i4 = str.lastIndexOf("I love");
        System.out.println("子串I love在字符串str最后一次出现的位置为:" + i4);

        // 查找不存在的字符
        int i5 = str.indexOf('E');
        System.out.println("查找不存在的字符E的结果为:" + i5);
    }
}

运行结果:

字符a在字符串str第一次出现的位置为:8
子串love在字符串str第一次出现的位置为:2
字符e在字符串str最后一次出现的位置为:18
子串I love在字符串str最后一次出现的位置为:13
查找不存在的字符E的结果为:-1

需要注意的是,以上方法的参数都是区分大小写的,如果没有找到指定的字符或子串,会返回 -1。

四、字符串截取

可以使用 substring() 方法来获取子串,String 类中有两个重载的实例方法:

  • String substring(int beginIndex):获取从 beginIndex 位置开始到结束的子串。
  • String substring(int beginIndex, int endIndex):获取从 beginIndex 位置开始到 endIndex 位置的子串(不包含 endIndex 位置字符)。

示例代码如下:

java 复制代码
public class StringMethod3 {
    public static void main(String[] args) {
        String str = "I love Java";
        String substring1 = str.substring(2);
        String substring2 = str.substring(2, 6);
        System.out.println("从索引位置2到结束的子串为:" + substring1);
        System.out.println("从索引位置2到索引位置6的子串为:" + substring2);
    }
}

运行结果:

从索引位置2到结束的子串为:love Java
从索引位置2到索引位置6的子串为:love

五、字符串切割

1. 切割为子串数组

使用 String[] split(String regex) 方法可将字符串切割为子串,其参数 regex 是一个正则表达式分隔符,返回字符串数组。示例如下:

java 复制代码
public class StringMethod4 {
    public static void main(String[] args) {
        String str1 = "I love Java";
        String[] strArr = str1.split(" ");
        for (String str : strArr) {
            System.out.print(str + "\t");
        }
    }
}

运行结果:

I	love	Java

对于一些特殊的分隔符,如 *^:|. 等,需要使用转义字符转义。例如:

java 复制代码
// 以 * 切割
String str2 = "I*love*Java";
String[] strArr2 = str2.split("\\*");

// 以 \ 切割
String str3 = "I\\love\\Java";
String[] strArr3 = str3.split("\\\\");

// 以 | 切割
String str4 = "I|love|Java";
String[] strArr4 = str4.split("\\|");

另外,还有一个重载方法 String[] split(String regex, int limit),其第二个参数 limit 用以控制正则匹配被应用的次数,会影响结果的长度。

2. 切割为 byte 数组

在实际工作中,网络上的数据传输通常使用二进制字节数据,因此字符串和字节数组之间的相互转换很常用。可以使用 getBytes() 方法将字符串转换为 byte 数组,示例如下:

java 复制代码
public class StringMethod4 {
    public static void main(String[] args) {
        String str2 = "我喜欢Java";
        System.out.println("将字符串转换为byte数组:");
        byte[] ascii = str2.getBytes();
        for (byte aByte : ascii) {
            System.out.print(aByte + "\t");
        }
        // 将字节数组转换为字符串
        String s = new String(ascii);
        System.out.println("\n将字节数组转换为字符串:" + s);
    }
}

六、字符串大小写转换

字符串的大小写转换有两个方法:

  • toLowerCase():将字符串转换为小写。
  • toUpperCase():将字符串转换为大写。

示例代码如下:

java 复制代码
public class StringMethod5 {
    public static void main(String[] args) {
        String str = "HELLO world";
        String s1 = str.toLowerCase();
        System.out.println("字符串str转换为小写后为:" + s1);
        String s2 = s1.toUpperCase();
        System.out.println("字符串s1转换为大写后为:" + s2);

        // 实现大小写互换
        String[] strArr = str.split(" ");
        String result = strArr[0].toLowerCase() + " " + strArr[1].toUpperCase();
        System.out.println("字符串str的大小写互换后为:" + result);
    }
}

运行结果:

字符串str转换为小写后为:hello world
字符串s1转换为大写后为:HELLO WORLD
字符串str的大小写互换后为:hello WORLD

七、字符串比较

String 类提供了 boolean equals(Object object) 方法来比较字符串内容是否相同,返回一个布尔类型的结果。需要特别注意的是,在比较字符串内容是否相同时,必须使用 equals() 方法而不能使用 == 运算符。示例代码如下:

java 复制代码
public class StringMethod6 {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "hello";
        String str3 = new String("hello");
        System.out.println("使用equals()方法比较str1和str2的结果为:" + str1.equals(str2));
        System.out.println("使用==运算符比较str1和str2的结果为:" + (str1 == str2));
        System.out.println("使用equals()方法比较str1和str3的结果为:" + str1.equals(str3));
        System.out.println("使用==运算符比较str1和str3的结果为:" + (str1 == str3));
    }
}

运行结果:

使用equals()方法比较str1和str2的结果为:true
使用==运算符比较str1和str2的结果为:true
使用equals()方法比较str1和str3的结果为:true
使用==运算符比较str1和str3的结果为:false

== 运算符比较的是两个变量的地址而不是内容。当使用直接赋值的方式创建字符串时,相同内容的字符串会指向常量池中的同一个对象;而使用 new 关键字创建字符串对象时,会在堆空间实例化一个新的对象。

八、小结

本文介绍了 Java String 类的常用方法:

  • 使用 length() 方法可以获取字符串长度。
  • 使用 charAt()indexOf() 以及 lastIndexOf() 方法可以对字符串进行查找。
  • substring() 方法可以对字符串进行截取,split()getBytes() 方法可以将字符串切割为数组。
  • toLowerCase()toUpperCase() 方法分别用于大小写转换,使用 equals() 方法对字符串进行比较,要注意对字符串内容进行比较时,不要使用 == 运算符。

这些方法大多有重载方法,实际工作中,要根据合适的场景选用对应的重载方法。此外,String 类还有很多未介绍到的方法,使用时可以翻阅官网文档进行学习。

相关推荐
shinelord明5 分钟前
【再谈设计模式】访问者模式~操作对象结构的新视角
开发语言·数据结构·算法·设计模式·软件工程
Python私教14 分钟前
Flutter 实现抖音风格底部导航栏
android·开发语言·javascript
饼干帅成渣18 分钟前
c++中sleep是什么意思(不是Sleep() )
开发语言·c++
JiaJunRun18 分钟前
Spring Core面试题
java·后端·spring
十五00125 分钟前
Apache部署Vue操作手册
java·vue·apache
Zfox_28 分钟前
【C++11】 并发⽀持库
c语言·开发语言·c++·并发
程序员南飞43 分钟前
算法-数据结构-图-邻接表构建
java·数据结构·算法·职场和发展
-Mr_X-43 分钟前
Java使用EasyExcel实现异步导出
java·开发语言
学学睡觉1 小时前
Python学习总结
开发语言·python·学习
╮壞孩子的天1 小时前
C语言多人聊天室 ---s(服务端)
c语言·开发语言·tcp/ip