在 Java 编程中,String 字符串是最常用的数据类型之一,而字符串的检索、截取、查找等操作更是日常开发的核心技能。今天我们通过一个「图书信息检索解析」的实战案例,吃透 Java 字符串的高频方法,轻松搞定字符串查找、截取、判断包含关系等核心知识点。

一、案例需求

有一段完整的图书信息字符串,包含书名、出版时间、出版社、价格、页数,需要实现以下功能:

  1. 判断字符串中是否包含指定关键词「程序」
  2. 截取并输出图书的出版时间
  3. 截取并解析图书价格,判断是否≥29 元
  4. 截取并解析图书页数,判断是否≥360 页

二、完整代码实现

我们直接基于题目模板补全代码,核心是替换【代码】部分,用到String 类的核心方法

public class FindMess {
    public static void main(String args[]) {
        String mess = "书名:Java 程序设计,出版时间:2011.10.01,"+
                "出版社:清华大学出版社,价格:29.8 元,页数:389 页";
        
        // 代码1:判断mess中是否含有"程序"
        if(mess.contains("程序")) { 
            System.out.println("图书信息包含有\"程序\"");
        }
        
        // 代码2:返回mess中第2个冒号的位置
        int index=mess.indexOf(":", mess.indexOf(":") + 1);
        String date = mess.substring(index+1,index+11);
        System.out.println(date);
        
        // 代码3:返回首次出现"价格"的位置
        int pricePosition= mess.indexOf("价格");
        int endPosition=mess.indexOf("元");
        String priceMess = mess.substring(pricePosition+3,endPosition);
        System.out.println("图书价格:"+priceMess);
        
        double price=Double.parseDouble(priceMess);
        if(price>=29) {
            System.out.println("图书价格"+price+"大于或等于 29 元");
        }
        else {
            System.out.println("图书价格"+price+"小于 29 元");
        }
        
        // 代码4:返回最后一个冒号位置
        index = mess.lastIndexOf(":");
        endPosition=mess.lastIndexOf("页");
        String pageMess = mess.substring(index+1,endPosition);
        int p = Integer.parseInt(pageMess);
        if(p>=360) {
            System.out.println("图书的页数"+p+"大于或等于 360");
        }
        else {
            System.out.println("图书的页数"+p+"小于 360");
        }
    }
}

运行结果

图书信息包含有"程序"
2011.10.01
图书价格:29.8 
图书价格29.8大于或等于 29 元
图书的页数389大于或等于 360

三、核心知识点详解

这个案例几乎覆盖了 Java 字符串最常用的 5 个方法,也是面试和开发的高频考点,我们逐一拆解:

1. contains(CharSequence s):判断字符串是否包含子串

  • 作用:检查当前字符串中是否包含指定的子字符串,返回boolean类型(true/false)。
  • 案例用法mess.contains("程序") → 判断图书信息是否包含「程序」。
  • 注意:区分大小写,比如"Program""program"是不同的。

2. indexOf(String str) / indexOf(String str, int fromIndex):查找子串首次出现的索引

  • 无参重载indexOf(str) → 从字符串开头查找,返回指定子串第一次出现的索引位置,找不到返回-1
  • 带起始索引重载indexOf(str, fromIndex) → 从fromIndex位置开始查找,返回子串首次出现的索引。
  • 案例用法
    • 找第 2 个冒号:mess.indexOf(":", mess.indexOf(":") + 1) → 先找第一个冒号,再从它的下一位找第二个冒号。
    • 找「价格」首次位置:mess.indexOf("价格") → 定位价格字段的起始位置。

3. lastIndexOf(String str):查找子串最后一次出现的索引

  • 作用:从字符串末尾向前查找,返回指定子串最后一次出现的索引位置,找不到返回-1
  • 案例用法mess.lastIndexOf(":") → 找到最后一个冒号(对应「页数」前的冒号)。

4. substring(int beginIndex, int endIndex):截取子字符串

  • 作用:从beginIndex(包含)开始,截取到endIndex(不包含),返回新的子串。
  • 核心规则:截取长度 = endIndex - beginIndex
  • 案例用法substring(index+1, index+11) → 截取出版时间(2011.10.01 共 10 个字符)。

5. 字符串转基本数据类型

  • Double.parseDouble(String s):将字符串转为双精度浮点数(用于价格)。
  • Integer.parseInt(String s):将字符串转为整数(用于页数)。
  • 注意:字符串必须是纯数字格式,否则会报NumberFormatException数字格式异常。

四、代码关键逻辑梳理

  1. 判断包含关系:用contains()快速校验关键词;
  2. 定位指定字符:用indexOf()/lastIndexOf()精准定位冒号、关键字的位置;
  3. 截取有效信息:通过substring()根据索引截取时间、价格、页数;
  4. 类型转换:将截取的字符串转为数字,做数值判断。

五、总结

Java 字符串操作是编程入门的核心基础,contains()indexOf()lastIndexOf()substring()这四个方法是字符串检索与截取的关键。

更多推荐