92. Java 数字和字符串 - 字符串

92. Java 数字和字符串 - 字符串

Java 编程中,字符串是最常用的数据类型之一。字符串表示为一系列字符,是不可变的对象,由 String 类来表示和操作。


一、创建字符串

1.1 使用字符串文字

最直接的创建方式是使用双引号括起的字符串文字。当编译器遇到字符串文字时,会自动创建一个 String 对象。例如:

java 复制代码
String greeting = "Hello world!";

在这行代码中,"Hello world!" 就是一个字符串文本,编译器会为它创建一个不可变的 String 对象。

1.2 使用构造函数

我们也可以使用 new 关键字结合 String 构造函数来创建字符串。String 类提供了多达 13 个构造函数,可以通过不同的源来初始化字符串。例如,使用字符数组来构造字符串:

java 复制代码
char[] helloArray = { 'h', 'e', 'l', 'l', 'o', '.' };
String helloString = new String(helloArray);
System.out.println(helloString);  // 输出: hello.

注意:由于 String 是不可变的,一旦创建后就无法修改。如果看似"修改"字符串的方法实际上都是返回了一个新字符串。


二、字符串的长度与字符访问

2.1 获取字符串长度

String 类提供了 length() 方法,用于获取字符串中字符的个数。例如:

java 复制代码
String palindrome = "Dot saw I was Tod";
int len = palindrome.length();  // len 为 17

2.2 访问字符串中的字符

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

java 复制代码
char firstChar = palindrome.charAt(0);  // 'D'

2.3 将字符串转换为字符数组

如果需要对字符串进行逐字符处理(例如反转字符串),可以先将字符串转换为字符数组。有两种常用方法:

方式一:手动循环
java 复制代码
int len = palindrome.length();
char[] tempCharArray = new char[len];
for (int i = 0; i < len; i++) {
    tempCharArray[i] = palindrome.charAt(i);
}
方式二:使用 getChars() 方法

getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 方法可以将字符串(或其一部分)复制到目标字符数组中。例如:

java 复制代码
char[] tempCharArray = new char[len];
palindrome.getChars(0, len, tempCharArray, 0);

2.4 反转字符串示例

下面是一个完整示例,展示如何将字符串反转:

java 复制代码
public class StringDemo {
    public static void main(String[] args) {
        String palindrome = "Dot saw I was Tod";
        int len = palindrome.length();
        char[] tempCharArray = new char[len];
        char[] reversedArray = new char[len];
        
        // 使用 getChars() 方法将字符串复制到字符数组中
        palindrome.getChars(0, len, tempCharArray, 0);
        
        // 反转字符数组
        for (int j = 0; j < len; j++) {
            reversedArray[j] = tempCharArray[len - 1 - j];
        }
        
        // 创建新的字符串
        String reversePalindrome = new String(reversedArray);
        System.out.println("反转后的字符串为: " + reversePalindrome);
    }
}

运行该程序将输出:

java 复制代码
doT saw I was toD

三、字符串连接

3.1 使用 concat() 方法

String 类提供了 concat(String str) 方法,用于连接两个字符串,并返回新字符串:

java 复制代码
String result = "My name is ".concat("Rumplestiltskin");
System.out.println(result);  // 输出: My name is Rumplestiltskin

3.2 使用 + 运算符

更常见的是使用 + 运算符进行字符串连接,这种方式在 print 语句中非常直观:

java 复制代码
String string1 = "saw I was ";
System.out.println("Dot " + string1 + "Tod");
// 输出: Dot saw I was Tod

在连接过程中,如果某个操作数不是 String 类型,Java 会自动调用其 toString() 方法将其转换为字符串。


四、多行字符串

Java SE 15 之前,文本字符串不能跨越多行书写,必须使用 + 运算符将每行连接起来;但从 Java SE 15 开始,引入了【文本块】(text blocks),允许直接书写多行字符串:

java 复制代码
String html = """
              <html>
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;
System.out.println(html);

这种方式不仅简洁,而且提高了多行字符串的可读性,特别适用于 HTMLSQLJSON 等格式。


五、格式化字符串

除了直接拼接字符串外,Java 还提供了格式化字符串的方法,例如 String.format()。这与 System.out.printf() 类似,只不过返回一个字符串对象而不是直接输出到控制台。例如:

java 复制代码
String fs = String.format("The value of the float variable is %f, while the value of the integer variable is %d, and the string is %s",
                           3.14159, 42, "Java");
System.out.println(fs);

输出结果:

java 复制代码
The value of the float variable is 3.141590, while the value of the integer variable is 42, and the string is Java

总结

  • 字符串创建 :可以使用字符串文字或构造函数创建 String 对象;字符串一经创建不可更改。
  • 字符串操作 :通过 length()charAt()getChars() 等方法可以获取字符串信息和操作字符。
  • 字符串连接 :可以使用 concat() 方法或 + 运算符进行连接;非 String 对象会自动转换为字符串。
  • 多行字符串 :从 Java SE 15 开始支持文本块,简化多行字符串的书写。
  • 格式化字符串 :利用 String.format() 方法可以生成格式化的字符串,方便重复使用和国际化支持。

通过以上内容和示例,希望大家能够深入理解和灵活运用 Java 中的字符串操作,从而编写出高效且易于维护的代码。

相关推荐
做运维的阿瑞36 分钟前
Python零基础入门:30分钟掌握核心语法与实战应用
开发语言·后端·python·算法·系统架构
猿究院-陆昱泽2 小时前
Redis 五大核心数据结构知识点梳理
redis·后端·中间件
卡布叻_星星2 小时前
前端JavaScript笔记之父子组件数据传递,watch用法之对象形式监听器的核心handler函数
前端·javascript·笔记
yuriy.wang2 小时前
Spring IOC源码篇五 核心方法obtainFreshBeanFactory.doLoadBeanDefinitions
java·后端·spring
开发加微信:hedian1163 小时前
短剧小程序开发全攻略:从技术选型到核心实现(前端+后端+运营干货)
前端·微信·小程序
咖啡教室4 小时前
程序员应该掌握的网络命令telnet、ping和curl
运维·后端
你的人类朋友5 小时前
Let‘s Encrypt 免费获取 SSL、TLS 证书的原理
后端
老葱头蒸鸡5 小时前
(14)ASP.NET Core2.2 中的日志记录
后端·asp.net
YCOSA20255 小时前
ISO 雨晨 26200.6588 Windows 11 企业版 LTSC 25H2 自用 edge 140.0.3485.81
前端·windows·edge
小白呀白5 小时前
【uni-app】树形结构数据选择框
前端·javascript·uni-app