96. Java 数字和字符串 - 比较字符串和字符串的各个部分

96. Java 数字和字符串 - 比较字符串和字符串的各个部分

Java 的 String 类提供了多种方法用于比较整个字符串或字符串的某个部分。下面列出的这些方法可以帮助我们在开发过程中完成字符串匹配、排序以及验证操作。

一、比较字符串的常用方法

  • endsWith(String suffix) 和 **startsWith(String prefix)**判断字符串是否以指定的后缀结尾或以指定的前缀开头。 示例:

    java 复制代码
    String s = "Hello, Java!";
    System.out.println(s.startsWith("Hello"));  // 输出 true
    System.out.println(s.endsWith("!"));          // 输出 true
  • **startsWith(String prefix, int offset)**判断从指定索引处开始的子字符串是否以某个前缀开头。 示例:

    java 复制代码
    String s = "Welcome to Java programming";
    // 从索引 11 开始的子字符串为 "Java programming"
    System.out.println(s.startsWith("Java", 11));  // 输出 true
  • **compareTo(String anotherString)**按字典顺序比较两个字符串。返回一个整数:

    • 大于 0 表示此字符串大于参数字符串
    • 等于 0 表示两个字符串相等
    • 小于 0 表示此字符串小于参数字符串 示例:
    java 复制代码
    String s1 = "apple";
    String s2 = "banana";
    System.out.println(s1.compareTo(s2));  // 输出一个负数,因为 apple 小于 banana
  • **compareToIgnoreCase(String str)**与 compareTo 类似,但忽略大小写。 示例:

    java 复制代码
    String s1 = "Apple";
    String s2 = "apple";
    System.out.println(s1.compareToIgnoreCase(s2));  // 输出 0,因为忽略大小写相等
  • **equals(Object anObject)**检查两个字符串是否完全相同(区分大小写)。 示例:

    java 复制代码
    String s1 = "Hello";
    String s2 = "hello";
    System.out.println(s1.equals(s2));  // 输出 false
  • **equalsIgnoreCase(String anotherString)**检查两个字符串是否相等,忽略大小写差异。 示例:

    java 复制代码
    System.out.println(s1.equalsIgnoreCase(s2));  // 输出 true

二、比较字符串部分的方法

  • **regionMatches(int toffset, String other, int ooffset, int len)**测试此字符串从索引 toffset 开始的子字符串与其他字符串从索引 ooffset 开始的子字符串长度为 len 的部分是否匹配。

  • **regionMatches(boolean ignoreCase, int toffset, String other, int ooffset, int len)**与前一个方法类似,但可以指定在比较时是否忽略大小写。

    示例:

    java 复制代码
    String s1 = "Hello, World!";
    String s2 = "WORLD";
    // 比较 s1 中从索引 7 开始的 5 个字符和 s2 是否匹配,忽略大小写
    boolean match = s1.regionMatches(true, 7, s2, 0, 5);
    System.out.println(match);  // 输出 true
  • **matches(String regex)**测试字符串是否与给定正则表达式匹配。 示例:

    java 复制代码
    String s = "abc123";
    System.out.println(s.matches("[a-z]+\\d+"));  // 输出 true

三、实际示例:使用 regionMatches 搜索子字符串

下面的程序 RegionMatchesDemo 演示了如何使用 regionMatches() 方法来查找字符串中指定部分的匹配情况。

java 复制代码
public class RegionMatchesDemo {
    public static void main(String[] args) {
        String searchMe = "Green Eggs and Ham";
        String findMe = "Eggs";
        int searchMeLength = searchMe.length();
        int findMeLength = findMe.length();
        boolean foundIt = false;

        // 遍历 searchMe 中的每个可能的子字符串
        for (int i = 0; i <= (searchMeLength - findMeLength); i++) {
           // 检查从索引 i 开始的子字符串是否与 findMe 匹配
           if (searchMe.regionMatches(i, findMe, 0, findMeLength)) {
              foundIt = true;
              System.out.println("找到匹配的子字符串: " + searchMe.substring(i, i + findMeLength));
              break;
           }
        }
        if (!foundIt)
            System.out.println("No match found.");
    }
}

程序说明:

  • 程序遍历字符串 searchMe 中的每个字符,逐步检查从该位置开始长度为 findMeLength 的子字符串是否与 findMe 匹配。

  • 若找到匹配则输出该子字符串并终止循环,否则最后输出 "No match found."。

  • 运行该程序输出为:

    java 复制代码
    找到匹配的子字符串: Eggs

四、总结

  • 使用 endsWith() 和 startsWith() 检查字符串的开头和结尾。
  • 使用 compareTo() 和 compareToIgnoreCase() 进行字典序比较。
  • 使用 equals() 和 equalsIgnoreCase() 检查字符串是否相等。
  • regionMatches() 方法允许比较字符串的特定区域,适用于精细的字符串匹配。
  • matches() 方法可用正则表达式进行复杂匹配。

通过这些方法,我们可以精确地比较整个字符串或其部分内容,为文本处理、验证和排序等任务提供有力支持。

相关推荐
sm_9267870512 分钟前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
IMPYLH23 分钟前
HTML 的 <video> 元素
前端·html
码事漫谈1 小时前
五道题,测测你有没有真的入门 AI
后端
溪语流沙1 小时前
【每天一个CSS | Day19】流光文字与一笔写成的手写签名
前端·javascript·css
蜗牛互联网1 小时前
Python + JSON Schema 实现工单结构化输出与本地复核
java·人工智能·后端
逐光者9331 小时前
STM32——SPI 屏 · Flash · 高速
java·前端·stm32
To_OC1 小时前
同样是让 AI 写全栈,为什么别人一句话就够了
前端·前端框架·next.js
CDwenhuohuo2 小时前
electron pc项目打包成桌面端
前端·javascript·electron
前端大斗师2 小时前
「大于 1000」把 1000 元那单也算进去了:我在 Vue3 订单页对了 10 句话
前端·人工智能·typescript·大模型·原力计划
Jmyd01232 小时前
用 Web VR 引擎搭建 3D 虚拟展厅:从素材上云到多端实时渲染的完整数据链路
前端·3d·vr·三维数字化