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 中的字符串操作,从而编写出高效且易于维护的代码。

相关推荐
不吃鱼的羊7 分钟前
ISOLAR软件生成报错处理(七)
java·前端·javascript
TE-茶叶蛋31 分钟前
React-props
前端·javascript·react.js
安分小尧31 分钟前
[特殊字符] 超强 Web React版 PDF 阅读器!支持分页、缩放、旋转、全屏、懒加载、缩略图!
前端·javascript·react.js
EndingCoder33 分钟前
React从基础入门到高级实战:React 高级主题 - React Concurrent 特性:深入探索与实践指南
前端·javascript·react.js·前端框架
EndingCoder34 分钟前
React从基础入门到高级实战:React 生态与工具 - React Query:异步状态管理
前端·javascript·react.js·前端框架
TE-茶叶蛋36 分钟前
ReactJS 中的 JSX工作原理
前端·react.js·前端框架
水煮白菜王36 分钟前
React 编译器
前端·react.js·前端框架
霸王蟹37 分钟前
React 项目中封装 Excel 导入导出组件:技术分享与实践
前端·笔记·学习·react.js·typescript·excel·vite
wl_37 分钟前
react-color-palette源码解析
前端·react.js·调色板
集成显卡42 分钟前
图片压缩工具 | Electron+Vue3+Rsbuild开发桌面应用
前端·javascript·electron·vue