总结并拆解所有新手常用的——String API(四)(已完结)

前言:

String 类包括的方法可用于检查序列的单个字符、比较字符串、搜索字符串、 提取子字符串、创建字符串副本并将所有字符全部转换为大写或小写.......

小编这次就比较全面系统的带大家总结清楚几乎所有string常用的API,并且带大家拆解清楚,能够灵活使用!!!

小编去医院拔了俩颗智齿,还有一颗牙坏的老厉害了,必须做根管治疗才行(呜呜呜)

但不影响继续日更一篇,我们继续一起进步吧!!!

我们一直都是以这样的形式,让新手小白轻松理解复杂晦涩的概念,

把Java代码拆解的清清楚楚,每一步都知道他是怎么来的,

为什么用这串代码关键字,对比同类型的代码,

让大家真正看完以后融会贯通,举一反三,实践应用!!!!


①官方定义  和  大白话拆解对比

②举生活中常见贴合例子、图解辅助理解的形式

③对代码实例中关键部分进行详细拆解、总结



给小编一个赞或者关注吧,我们一起进步!!

5:开头与结尾:

官方语言

  1. boolean startsWith(String prefix):这个方法用于判断当前字符串是否以给定的前缀(prefix)开始。如果字符串从第一位字符起就与指定的前缀相同,则返回true;否则,返回false。
  2. boolean startsWith(String prefix, int toffset):此方法用于检查从当前字符串中指定的位置(toffset)开始的子字符串是否以给定的前缀(prefix)开始。如果从指定位置开始的子字符串与给定前缀匹配,则返回true;否则,返回false。
  3. boolean endsWith(String suffix):这个方法用于判断当前字符串是否以指定的后缀(suffix)结束。如果字符串在末尾处与指定的后缀相匹配,则返回true;否则,返回false。

大白话拆解:


有一串珠子,每颗珠子代表一个字母。现在我们来玩一个小游戏:

  1. startsWith:就像是问你这串珠子是不是从某个特定的颜色开始的。比如,如果你有红、蓝、绿三颗珠子,而我问你它们是不是从红色开始的,你会说是的,因为最左边的那颗是红色的。
  2. startsWith(String prefix, int toffset):这就像我让你忽略最左边的一些珠子,然后告诉我剩下的部分是不是从某种颜色开始的。例如,假设你的珠子顺序是红、蓝、绿,我说“从第二颗珠子开始看,是不是蓝色?”你会回答是的。
  3. endsWith:这是在问你的珠子串是不是以某种颜色结束的。还是用之前的例子,如果有红、蓝、绿三颗珠子,我问你它们是不是以绿色结束的,你会说是的,因为最右边的那颗是绿色的。


有一个字符串 "HelloWorld":

  1. 使用 startsWith("Hello"),会返回 true,因为它确实是以 "Hello" 开头的。
  2. 使用 startsWith("World", 5),也会返回 true,因为我们从索引 5(即第6个字符"W")开始检查,之后的部分正是 "World"。
  3. 使用 endsWith("World"),同样返回 true,因为字符串是以 "World" 结束的。

举个栗子:

public class StringMethodExample {
    public static void main(String[] args) {
        // 定义一个字符串变量表示文件名
        String fileName = "report_20250110_world.txt";

        // 检查文件名是否以"report_"开头
        boolean startsWithReport = fileName.startsWith("report_");
        System.out.println("Does the filename start with 'report_'? " + startsWithReport);

        // 检查从索引7开始的子字符串是否以"2025"作为前缀(即年份)
        boolean startsWithYear = fileName.startsWith("2025", 7);
        System.out.println("Does the filename contain '2025' as a year after the prefix? " + startsWithYear);

        // 检查文件名是否以".txt"结尾
        boolean endsWithTxt = fileName.endsWith(".txt");
        System.out.println("Is the filename ending with '.txt'? " + endsWithTxt);
    }
}

代码解释和总结:

  • 定义字符串变量:首先,我们定义了一个名为fileName的字符串变量,值为 "report_20250110_world.txt"。这个字符串代表了一个可能的文件名。
  • startsWith("report_"):这里我们用startsWith方法来判断fileName是否以 "report_" 开头。这是用来验证文件名是否遵循某种格式或命名约定,比如所有报告都以 "report_" 开头。
  • startsWith("2025", 7):在这个例子中,我们不仅想检查前缀,还想确认特定位置之后的内容。通过startsWith(String prefix, int toffset)方法,我们可以指定起始位置(这里是索引7)后检查是否有特定的字符串(在这里是 "2025")。这可以用于提取和验证日期等信息。
  • endsWith(".txt"):最后,我们使用endsWith方法来检查文件名是否以 .txt 结尾,这有助于确认文件类型是否是我们预期的那种(例如文本文件)。

6:替换

官方语言

  • String replace(char oldChar, char newChar):返回一个新的字符串,它是通过将此字符串中出现的所有 oldChar 替换为 newChar 得到的。不支持正则表达式。
  • String replace(CharSequence target, CharSequence replacement):使用指定的字面值替换序列 replacement 替换此字符串中所有匹配字面值目标序列 target 的子字符串。
  • String replaceAll(String regex, String replacement):使用给定的 replacement 替换此字符串中所有匹配给定的正则表达式的子字符串。
  • String replaceFirst(String regex, String replacement):使用给定的 replacement 替换此字符串中第一个匹配给定的正则表达式的子字符串。

大白话拆解:


有一串珠子,每颗珠子代表一个字母或字符。现在我们来玩一个小游戏:

  • replace(char oldChar, char newChar):就像把所有颜色为红色(oldChar)的珠子换成蓝色(newChar)。例如,如果你有红、绿、红三颗珠子,而我让你把所有的红色珠子都换成蓝色,最终你会得到蓝、绿、蓝三颗珠子。
  • replace(CharSequence target, CharSequence replacement):这有点像找到特定的珠子组合并用另一组珠子替换它们。比如,如果你有红、绿、蓝三颗珠子组成的“信号”,我让你找到所有的“绿、蓝”组合,并用一颗黄色珠子代替,那么你最后可能会得到红、黄的组合。
  • replaceAll(String regex, String replacement):这个就像是寻找遵循某种模式的珠子组合,并全部替换。例如,如果我们要找所有以红色开头的珠子组合并用紫色珠子替换,那么无论有多少这样的组合都会被替换。
  • replaceFirst(String regex, String replacement):与上面类似,但只替换第一次找到的符合模式的珠子组合。也就是说,一旦找到了符合条件的第一个组合,就停止搜索和替换。

举个栗子:

public class ReplaceExample {
    public static void main(String[] args) {
        String text = "Hello World! Hello Universe!";
        
        // 使用replace方法替换'l'为'X'
        System.out.println(text.replace('l', 'X'));
        
        // 使用replace方法替换"Hello"为"Hi"
        System.out.println(text.replace("Hello", "Hi"));
        
        // 使用replaceAll方法替换所有以"H"开头的单词为"Hey"
        System.out.println(text.replaceAll("\\bH\\w*", "Hey"));
        
        // 使用replaceFirst方法仅替换第一个匹配的以"H"开头的单词为"Hey"
        System.out.println(text.replaceFirst("\\bH\\w*", "Hey"));
    }
}
  • 第一个replace('l', 'X')会将所有的小写字母'l'替换成'X',结果是"HeXXo WorXd! HeXXo Universe!"
  • 第二个replace("Hello", "Hi")会将所有的"Hello"替换成"Hi",结果是"Hi World! Hi Universe!"
  • replaceAll("\\bH\\w*", "Hey")使用正则表达式替换所有以'H'开头的单词为"Hey",结果是"Hey World! Hey Universe!"
  • 最后replaceFirst("\\bH\\w*", "Hey")只替换第一个匹配的以'H'开头的单词,结果是"Hey World! Hello Universe!"

再举个栗子:

带大家深刻理解这些方法的工作原理。

public class ReplaceMethodsExample {
    public static void main(String[] args) {
        // 定义一个字符串变量
        String sentence = "Hello World! Hello Universe!";
        
        // 使用replace替换所有'l'为'X'
        String replacedL = sentence.replace('l', 'X');
        System.out.println("Replace all 'l' with 'X': " + replacedL);
        
        // 使用replace替换所有的"Hello"为"Hi"
        String replacedHello = sentence.replace("Hello", "Hi");
        System.out.println("Replace all 'Hello' with 'Hi': " + replacedHello);
        
        // 使用replaceAll替换所有以'H'开头的单词为'Hey'
        String replacedAllH = sentence.replaceAll("\\bH\\w*", "Hey");
        System.out.println("Replace all words starting with 'H' with 'Hey': " + replacedAllH);
        
        // 使用replaceFirst仅替换第一个匹配的以'H'开头的单词为'Hey'
        String replacedFirstH = sentence.replaceFirst("\\bH\\w*", "Hey");
        System.out.println("Replace the first word starting with 'H' with 'Hey': " + replacedFirstH);
    }
}

有一个句子 "Hello World! Hello Universe!",我们想要对这句话做一些修改:

  • replace('l', 'X'):想象一下,你要把所有的小写字母“l”都换成字母“X”。就像在你的句子中找到所有的“l”,然后用“X”替代它们。所以原来的句子会变成"HeXXo WorXd! HeXXo Universe!"。
  • replace("Hello", "Hi"):现在我们要把所有的“Hello”替换成“Hi”。这就像搜索整个句子中的“Hello”这个词,并将其替换为“Hi”。结果是"Hi World! Hi Universe!"。
  • replaceAll("\\bH\\w*", "Hey"):这里我们要找的是所有以大写字母“H”开头的单词,并将它们替换为“Hey”。这个有点复杂,因为它是基于正则表达式的。正则表达式\\bH\\w*意味着任何以“H”开头并跟随任意数量字母或数字的单词(即以“H”开头的所有单词)。这样,原来的句子变成了"Hey World! Hey Universe!"。
  • replaceFirst("\\bH\\w*", "Hey"):这次只替换第一个匹配到的以“H”开头的单词。与上面的例子类似,但只替换第一次出现的情况。因此,只有第一个“Hello”被替换成了“Hey”,结果是"Hey World! Hello Universe!"。

我们可以根据不同的需求使用不同的替换方法来修改字符串内容。无论是简单的字符替换还是复杂的模式匹配替换,Java都提供了简单易用的方法来实现。



我们今天就先到这里,下次见吧!!!



<think>嗯,用户现在想要寻找关于用Java实现盲人语音导航系统的新手教程。之前我给他提供了一个比较详细的方案,但现在他作为新手可能需要更基础的指导。首先,我需要回顾之前的对话,确保不重复信息,同时补充适合新手的入门内容。 用户之前提到的系统架构包括多源输入、安全处理层和多模态输出,代码示例也比较复杂,可能对新手来说有点难。现在需要简化,分步骤讲解,让新手能够逐步理解和实现。 用户提供的参考引用里提到了使用RISC-V MCU和51单片机,但用户现在问的是Java实现,可能需要解释Java在其中的角色,比如后端处理、Android应用开发等。同时,用户是新手,可能需要推荐一些基础工具和库,比如语音合成的库、蓝牙通信的API等。 另外,用户提到的功能包括避障、GPS定位、语音播报、紧急求助等,需要将这些功能拆解Java可以实现的模块,比如使用传感器库获取数据,处理逻辑后通过语音输出。同时要考虑新手可能对硬件交互不熟悉,可能需要模拟数据或者使用简单的硬件模块。 还要注意用户可能需要环境搭建的指导,比如安装JDK、配置IDE、添加依赖库等。代码示例要尽量简单,避免复杂的多线程或网络通信,先从基础功能开始,比如语音提示和按键处理。 最后,确保回答结构清晰,分步骤讲解,每个步骤提供代码示例和解释,推荐相关的学习资源,帮助新手逐步深入。同时,生成的相关问题要针对新手可能遇到的困难,比如如何连接硬件、处理语音指令等。</think>以下是专为Java新手设计的盲人导航系统开发指南,包含基础实现方案、代码案例和学习路线: ### 一、新手开发路线图(分步实现) ```mermaid graph LR A[环境搭建] --> B[语音功能] B --> C[基础导航] C --> D[避障检测] D --> E[紧急求助] E --> F[系统集成] ``` ### 二、基础环境配置 1. **必备工具包**: ```xml <!-- pom.xml 依赖配置 --> <dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-speech</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>com.fazecast</groupId> <artifactId>jSerialComm</artifactId> <version>2.9.2</version> </dependency> ``` 2. **开发环境要求**: - JDK 11+ - IntelliJ IDEA(社区版即可) - Android Studio(移动端开发) ### 三、核心功能实现(新手友好版) #### 1. 语音交互模块 ```java // 基础语音提示系统 public class BasicVoiceGuide { public static void main(String[] args) { // 初始化语音引擎 TextToSpeech tts = new TextToSpeech(); // 简单导航指令 String[] directions = { "前方直行10米", "右转进入人行道", "注意:左侧有障碍物" }; // 循环播报演示 for (String msg : directions) { tts.speak(msg); try { Thread.sleep(3000); // 间隔3秒 } catch (InterruptedException e) { e.printStackTrace(); } } } } ``` #### 2. 避障检测模拟 ```java // 虚拟超声波传感器(新手练习用) public class FakeUltrasonic { private static final Random rand = new Random(); // 模拟障碍物检测 public static double getDistance() { return rand.nextDouble() * 5; // 0-5米随机值 } public static void main(String[] args) { while (true) { double distance = getDistance(); if (distance < 1.0) { System.out.println("警告!前方障碍物距离: " + String.format("%.2f", distance) + "米"); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } ``` ### 、硬件交互基础 1. **串口通信示例**: ```java // 与Arduino通信基础 public class SerialComm { public static void main(String[] args) { SerialPort[] ports = SerialPort.getCommPorts(); SerialPort arduino = ports[0]; // 选择正确端口 if (arduino.openPort()) { System.out.println("端口已打开"); // 数据接收线程 new Thread(() -> { while (true) { byte[] buffer = new byte[arduino.bytesAvailable()]; arduino.readBytes(buffer, buffer.length); String data = new String(buffer); System.out.println("收到数据: " + data); } }).start(); } } } ``` ### 五、完整新手项目架构 ``` 项目目录结构 ├── src │ ├── main │ │ ├── java │ │ │ ├── voiceguide # 语音模块 │ │ │ ├── sensors # 传感器接口 │ │ │ ├── navigation # 路径算法 │ │ │ └── emergency # 紧急求助 │ ├── resources │ │ └── audio # 语音文件 ├── lib # 外部依赖库 └── test # 单元测试 ``` ### 六、学习资源推荐 1. **基础教程**: - [Java串口编程入门](https://www.javatpoint.com/serial-communication-in-java) - [Google语音API使用指南](https://cloud.google.com/speech-to-text/docs) 2. **硬件推荐**: - HC-SR04超声波模块(¥15-25) - JDY-31蓝牙模块(¥12-18) - SIM800L GSM模块(¥30-45)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值