由一道题引发对indexOf()和lastIndexOf()的思考

本文介绍了一种在字符串中快速找到第一个仅出现一次的字符的算法。通过使用indexOf()和lastIndexOf()方法,该算法能简洁地实现目标,且这两个方法均从前向后计算索引,确保了结果的准确性。

这道题是给一个字符串,找出第一个只出现一次的字符,比如str=aabbcddeed,答案找出来肯定是c,实现代码如下

for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (str.indexOf(ch) == str.lastIndexOf(ch))
                return i; 
        }

如果熟悉字符串方法的话,这道题代码非常的简洁,
indexOf()查找某个指定字符串在字符串中首次出现的位置,lastIndexOf()是查找某个指定的字符串在这个字符串中最后一次出现的位置,
一个从前往后一个从后往前,为什么结果会相同,?
在这里插入图片描述
在这里插入图片描述
实验结果证明indexOf和lastIndexOf返回的索引值都是从前往后计算的,

在多种编程语言中,`indexOf` `lastIndexOf` 是用于在字符串中查找子字符串位置的常用方法。 ### 用法 - **`indexOf`**:用于在字符串中查找指定子串,并返回第一个匹配项的索引。在 Java 中,提供了四种常用的查找方法,分别是 `indexOf(String str)`、`indexOf(String str, int startIndex)` [^2]。在 C# 里,`String.IndexOf` 也有多种重载形式,用于不同的查找需求。 - **`lastIndexOf`**:报告指定字符串在当前 `String` 对象中最后一个匹配项的索引。在 C# 中,如 `String.LastIndexOf (String, Int32, StringComparison)`,参数指定当前字符串中的起始搜索位置,以及要用于指定字符串的搜索类型 [^1]。在 Java 中,有 `lastIndexOf(String str)`、`lastIndexOf(String str, int startIndex)` 等方法 [^2]。 ### 区别 `indexOf` 是从左向右查找子字符串,而 `lastIndexOf` 是从右向左查找子字符串。不过,不管是 `indexOf` 还是 `lastIndexOf`,索引序列都是从左到右的,起始值是 0。如果找不到指定的子字符串,两者都会返回 -1 [^3]。 ### 示例 #### Java 示例 ```java public class IndexOfExample { public static void main(String[] args) { String text = "Hello, World! Hello, Java!"; // 使用 indexOf 查找 "Hello" 第一次出现的位置 int firstIndex = text.indexOf("Hello"); System.out.println("First occurrence of 'Hello': " + firstIndex); // 使用 lastIndexOf 查找 "Hello" 最后一次出现的位置 int lastIndex = text.lastIndexOf("Hello"); System.out.println("Last occurrence of 'Hello': " + lastIndex); } } ``` #### C# 示例 ```csharp using System; class Program { static void Main() { string text = "Hello, World! Hello, C#!"; // 使用 IndexOf 查找 "Hello" 第一次出现的位置 int firstIndex = text.IndexOf("Hello"); Console.WriteLine("First occurrence of 'Hello': " + firstIndex); // 使用 LastIndexOf 查找 "Hello" 最后一次出现的位置 int lastIndex = text.LastIndexOf("Hello"); Console.WriteLine("Last occurrence of 'Hello': " + lastIndex); } } ``` #### Arduino 示例 ```cpp void setup() { Serial.begin(9600); String text = "Arduino is great! Arduino rocks!"; // 使用 indexOf 查找 "Arduino" 第一次出现的位置 int firstIndex = text.indexOf("Arduino"); Serial.print("First occurrence of 'Arduino': "); Serial.println(firstIndex); // 使用 lastIndexOf 查找 "Arduino" 最后一次出现的位置 int lastIndex = text.lastIndexOf("Arduino"); Serial.print("Last occurrence of 'Arduino': "); Serial.println(lastIndex); } void loop() { // 这里可以留空 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值