杰瑞科技汇

java string 返回值

String 在 Java 中是一个极其核心和特殊的类,它的返回值贯穿了整个 Java 开发,我们可以从几个层面来理解它的返回值。

java string 返回值-图1
(图片来源网络,侵删)

  1. 不可变性: String 对象是不可变的,任何对字符串的修改操作(如 substring, replace, toUpperCase 等)都不会修改原始字符串,而是返回一个新的 String 对象来表示修改后的结果。
  2. 常用返回值类型:
    • String: 这是最常见的返回值,用于返回一个新的字符串。
    • int: 用于返回字符的 Unicode 码点或子字符串的起始索引。
    • boolean: 用于判断字符串是否满足某个条件(如是否为空、是否以某串开头等)。
    • char[]: 用于将字符串内容转换为字符数组。
    • byte[]: 用于将字符串按指定编码转换为字节数组。
    • Stream<Character>IntStream: 用于进行函数式编程风格的流式处理。
    • String[]: 用于将字符串按某个分隔符拆分成一个字符串数组。

不可变性 - 理解 String 返回值的关键

这是最重要的一点,当你调用一个 String 的方法时,你需要清楚它是否会改变原来的字符串。

规则:所有 String 类中用于修改内容的方法,都不会改变调用它们的那个 String 对象本身,而是返回一个新的 String 对象。

示例代码:

public class StringReturnExample {
    public static void main(String[] args) {
        String original = "Hello World";
        // 调用 toUpperCase() 方法
        // original 变量本身没有被改变
        String uppercased = original.toUpperCase();
        System.out.println("Original string: " + original); // 输出: Hello World
        System.out.println("Uppercased string: " + uppercased); // 输出: HELLO WORLD
        // 调用 replace() 方法
        String replaced = original.replace("World", "Java");
        System.out.println("Original string: " + original); // 输出: Hello World
        System.out.println("Replaced string: " + replaced); // 输出: Hello Java
    }
}

分析:

java string 返回值-图2
(图片来源网络,侵删)
  • original.toUpperCase() 返回了一个新的字符串 "HELLO WORLD",并将其赋值给 uppercased 变量。original 本身仍然是 "Hello World"
  • original.replace(...) 返回了一个新的字符串 "Hello Java",并将其赋值给 replaced 变量。original 依然没有改变。

按功能分类:常见 String 方法的返回值

下面我们按功能分类,详细列出常用 String 方法的返回值及其用途。

A. 查询与判断方法 (返回 booleanint)

这些方法通常用于获取信息或进行条件判断。

方法名 返回值类型 描述
equals(Object anObject) boolean 比较此字符串与指定对象是否相等(区分大小写)。
equalsIgnoreCase(String anotherString) boolean 比较此字符串与另一个字符串是否相等(不区分大小写)。
contains(CharSequence s) boolean 判断字符串是否包含指定的字符序列。
startsWith(String prefix) boolean 判断字符串是否以指定的前缀开头。
endsWith(String suffix) boolean 判断字符串是否以指定的后缀结尾。
isEmpty() boolean 判断字符串长度是否为 0。
length() int 返回字符串的长度。
charAt(int index) char 返回指定索引处的 char 值。
indexOf(String str) int 返回子字符串第一次出现的索引,如果不存在则返回 -1。
lastIndexOf(String str) int 返回子字符串最后一次出现的索引,如果不存在则返回 -1。

示例:

String text = "Java is fun";
boolean containsFun = text.contains("fun");       // 返回 true
boolean startsWithJava = text.startsWith("Java"); // 返回 true
int length = text.length();                      // 返回 11
int indexOfIs = text.indexOf("is");              // 返回 5

B. 修改与构造方法 (返回 String)

这些方法会基于原始字符串创建一个新字符串。

java string 返回值-图3
(图片来源网络,侵删)
方法名 返回值类型 描述
substring(int beginIndex) String 返回一个子字符串,从 beginIndex 开始到末尾。
substring(int beginIndex, int endIndex) String 返回一个子字符串,从 beginIndex 开始到 endIndex - 1。
concat(String str) String 返回一个新字符串,内容为此字符串后面连接 str 字符串。 ( 运算符更常用)
replace(char oldChar, char newChar) String 返回一个新字符串,所有 oldChar 被替换为 newChar
replaceAll(String regex, String replacement) String 返回一个新字符串,所有匹配正则表达式 regex 的子串被替换。
toUpperCase() / toLowerCase() String 返回一个新字符串,所有字符分别转换为大写/小写。
trim() String 返回一个新字符串,移除了首尾的空白字符。
String.valueOf(...) String 静态方法,将各种基本数据类型或对象转换为字符串。

示例:

String s = "  Hello, Java!  ";
String trimmed = s.trim();            // 返回 "Hello, Java!"
String upper = s.toUpperCase();       // 返回 "  HELLO, JAVA!  "
String sub = s.substring(2, 7);      // 返回 "Hello"
String replaced = s.replace("Java", "World"); // 返回 "  Hello, World!  "

C. 转换方法 (返回 char[], byte[], String[])

这些方法用于将字符串转换为其他数据结构。

方法名 返回值类型 描述
toCharArray() char[] 返回一个新分配的字符数组,包含此字符串中的所有字符。
getBytes() byte[] 返回一个字节数组,按平台默认字符集编码。
getBytes(String charsetName) byte[] 返回一个字节数组,按指定字符集编码。
split(String regex) String[] 返回一个字符串数组,按给定的正则表达式拆分此字符串。

示例:

String text = "apple,banana,cherry";
// 转换为字符数组
char[] chars = text.toCharArray(); // chars 是 ['a', 'p', 'p', 'l', 'e', ',', ...]
// 拆分为字符串数组
String[] fruits = text.split(","); // fruits 是 ["apple", "banana", "cherry"]

D. Java 8+ 新增:流式处理方法 (返回 Stream)

Java 8 引入了 Stream API,String 也提供了相应的方法来支持函数式编程。

方法名 返回值类型 描述
chars() IntStream 返回一个 int 的流,流的元素是此字符串中的字符的 Unicode 码点。
codePoints() IntStream 返回一个 int 的流,流的元素是此字符串中的字符的 Unicode 码点,能更好地处理增补字符。
lines() Stream<String> 返回一个字符串的流,按行分割(按 \n, \r, \r\n)。

示例:

String multilineText = "Line 1\nLine 2\nLine 3";
// 按行处理
multilineText.lines()
              .filter(line -> line.contains("2"))
              .forEach(System.out::println); // 输出: Line 2
// 统计字符数(不包括空格)
long charCount = "Java is great".chars()
                                 .filter(ch -> ch != ' ')
                                 .count(); // 返回 11

特殊情况: (连接运算符) 的返回值

在 Java 中, 运算符可以用于连接字符串,它的行为稍微特殊。

  1. 如果任一操作数是 String 类型, 会被当作连接运算符,并返回一个新的 String 对象
  2. 如果两个操作数都是基本类型, 是加法运算符。

示例:

int num = 10;
String text = "Score: ";
// num 被自动转换为 "10",然后进行连接
String result = text + num; // 返回一个新的字符串 "Score: 10"
System.out.println(result);

注意: 在循环中大量使用 连接字符串是低效的,因为每次连接都会创建一个新的 String 对象,推荐使用 StringBuilderStringBuffer

// 低效方式
String s = "";
for (int i = 0; i < 1000; i++) {
    s = s + i; // 循环1000次,创建1000个新的String对象
}
// 高效方式
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++) {
    sb.append(i); // 在同一个StringBuilder对象上操作
}
String efficientResult = sb.toString(); // 最后只创建一个String对象

总结表格

功能类别 常见方法 返回值类型 核心要点
信息查询 length(), indexOf(), charAt() int, char 获取字符串的属性或位置信息。
条件判断 equals(), startsWith(), contains() boolean 判断字符串是否符合某个条件。
类型转换 toCharArray(), getBytes(), split() char[], byte[], String[] 将字符串转换为其他数据结构。
流式处理 chars(), lines() IntStream, Stream<String> 返回一个流,用于函数式操作。
字符串连接 运算符, concat() String 返回一个新字符串,原字符串不变。

String 的不可变性 是理解其所有方法返回值的基础,只要涉及到内容“改变”,就一定会返回一个新对象。

分享:
扫描分享到社交APP
上一篇
下一篇