`

模仿String.indexOf,判断一个字符串是否包含另一个字符串

阅读更多
.

目录:
一.方法介绍
二.图示意
三.源代码

一.方法介绍

判断一个字符串str1是否包含另一个字符串str2:
1.取str2的第一个字符一次和str1的字符依次比较,知道找到相等的字符为止或者找完整个str1的length.
2.当找到相等的字符后,在str2长度内str2与str1依次进行比较

二.图示意



三.源代码

JDK中java.lang.String.indexOf(char[], int, int, char[], int, int, int)源码:
/**
     * Code shared by String and StringBuffer to do searches. The
     * source is the character array being searched, and the target
     * is the string being searched for.
     *
     * @param   source       the characters being searched.
     * @param   sourceOffset offset of the source string.
     * @param   sourceCount  count of the source string.
     * @param   target       the characters being searched for.
     * @param   targetOffset offset of the target string.
     * @param   targetCount  count of the target string.
     * @param   fromIndex    the index to begin searching from.
     */
    static int indexOf(char[] source, int sourceOffset, int sourceCount,
                       char[] target, int targetOffset, int targetCount,
                       int fromIndex) {
	if (fromIndex >= sourceCount) {
            return (targetCount == 0 ? sourceCount : -1);
	}
    	if (fromIndex < 0) {
    	    fromIndex = 0;
    	}
	if (targetCount == 0) {
	    return fromIndex;
	}

        char first  = target[targetOffset];
        int max = sourceOffset + (sourceCount - targetCount);

        for (int i = sourceOffset + fromIndex; i <= max; i++) {
            /* Look for first character. */
            if (source[i] != first) {
                while (++i <= max && source[i] != first);
            }

            /* Found first character, now look at the rest of v2 */
            if (i <= max) {
                int j = i + 1;
                int end = j + targetCount - 1;
                for (int k = targetOffset + 1; j < end && source[j] ==
                         target[k]; j++, k++);

                if (j == end) {
                    /* Found whole string. */
                    return i - sourceOffset;
                }
            }
        }
        return -1;
    }



模仿的判断一个字符串是否包含另一个字符串的源码:
public static String compareDoubleString(String source, String target) {
		// 分别获取两个字符串的长度,因为后面会用到
		int sourceLength = source.length();
		int targetLength = target.length();

		// 获取目标的第一个字符
		char firstTargetChar = target.charAt(0);

		// 最多比较的次数
		int max = sourceLength - targetLength;
		// 如果第一个不相等,那么一直找到相等的那一个或者找完都不能找到
		int sourceOffset = -1;
		while (++sourceOffset < max
				&& source.charAt(sourceOffset) != firstTargetChar) {
		}
		if (sourceOffset <= max) {
			// 设置新的源索引
			int newSourceOffset = sourceOffset + 1;
			// 剩余的比较长度,也就是在offset上增加targetLength
			int leaveLength = newSourceOffset + targetLength - 1;
			int targetOffset = 1;
			// 连续的比较,条件不符合的时候跳出
			for (; newSourceOffset < leaveLength
					&& source.charAt(newSourceOffset) == target
							.charAt(targetOffset); newSourceOffset++, targetOffset++)
				;
			if (newSourceOffset == leaveLength) {
				return "包含:source包含target字符串!";
			}
		}
		return "不包含:source不包含target字符串!";
	}



.


分享到:
评论

相关推荐

    JS中判断某个字符串是否包含另一个字符串的五种方法

    String对象的方法 方法一: indexOf() (推荐) var str = "123" console.log(str.indexOf("2") !...match() 方法可在字符串内检索指定的值,或找到一个或多个正则表达式的匹配。 方法三: search()

    JavaScript判断一个字符串是否包含指定子字符串的方法

    在处理字符串时,判断一个字符串是否包含另一个子字符串是常见的需求。本篇内容将详细介绍如何使用JavaScript来实现这一功能,并提供相关的代码示例和技巧。 首先,介绍基本的字符串包含判断方法。在ES5标准中,...

    C#判断一个字符是否在字符串里/数组里

    1. **`Contains`方法**:这是字符串类的一个成员,用于检查字符串是否包含指定的字符。例如: ```csharp string str = "Hello, World!"; char c = 'o'; if (str.Contains(c.ToString())) { Console.WriteLine(...

    C#判断一个字符串是否包含另一个字符串的方法

    因此,我们可以通过检查`IndexOf`方法的返回值是否大于-1来判断一个字符串是否包含另一个字符串。 以下是如何使用`IndexOf`方法的基本语法: ```csharp int index = sourceString.IndexOf(subString); ``` 在这个...

    字符串string.zip

    在本压缩包“字符串string.zip”中,主要包含的是与Java编程语言中字符串相关的教学资料,特别是针对S1课程的学员。这个课程旨在帮助学生深入理解程序逻辑,并且重点聚焦在Java中的字符串处理。文件“Chapter15”...

    怎样判断一个字符串在一个LISTBOX中是否存在

    本文详细介绍了如何在Delphi中判断一个字符串是否存在于ListBox中,包括使用内置方法和调用Windows API两种方式。此外,还讨论了字符串存在时的一些常见操作。通过这些方法,可以有效地实现对ListBox中数据的管理和...

    C#字符串删除指定字符串|字符串删除子字符串

    在C#编程语言中,处理字符串是常见的任务之一,其中包括删除字符串中的特定部分或子字符串。本篇文章将详细探讨如何在C#中实现这一功能,包括多种方法和实用技巧。 首先,C#提供了多种内置方法来操作字符串,比如`...

    常用字符串处理整理.rar

    7. 判断字符串是否为空或只包含空格:`String.IsNullOrEmpty()`和`String.IsNullOrWhiteSpace()`。 8. 字符串比较:`String.Equals()`和`String.Compare()`可以进行字符串的比较,区分大小写或不区分大小写。 接...

    深入解析 JavaScript 中的 indexOf 和 includes 方法

    开发者经常需要检查一个字符串是否包含另一个字符串,或者需要找出一个子字符串在母字符串中的位置。为此,JavaScript 提供了 String.prototype.indexOf 和 String.prototype.includes 两个方法。本文将详细探讨这两...

    java代码-判断一个程序字符串是否出现在另一个字符串

    以上就是Java中判断一个字符串是否包含在另一个字符串中的几种常见方法。根据实际需求,你可以选择最适合的方法。在实际编程中,还需要考虑性能因素,因为不同的方法在处理大量数据时可能有不同的效率。例如,对于...

    js判断一个字符串是否包含一个子串的方法

    总结来说,判断一个字符串是否包含另一个子串,可以使用`indexOf`、`search`、`contains`等方法。每种方法都有其特点和适用场景,选择时应考虑实际需求和环境支持。同时,也要注意在实际开发中进行性能测试,以保证...

    [字符串]字符串提取(获取两个字符串中间的字符串)

    在C#中,处理字符串时,我们经常需要从一个较大的字符串中提取出特定部分,比如位于两个已知字符串之间的子串。这在解析日志、处理配置文件或者从HTML源码中提取信息时非常常见。标题中的“字符串提取(获取两个字符...

    常用字符串处理函数-求子字符串,字符串分割,编码转换.

    `indexOf`函数用于查找一个字符串在另一个字符串中的位置。例如,如果我们有字符串`"monkey"`,我们可以使用`indexOf`来查找字符`"m"`或`"key"`的位置。如果子字符串不存在于原字符串中,`indexOf`会返回-1。例如: ...

    C#批量删除字符串中间的字符串UpdateContent.rar

    在实际项目中,你可能需要根据具体需求对这些基础方法进行调整,例如,添加错误处理、判断字符串是否为空,或者优化性能以处理大量数据。在进行字符串操作时,务必注意性能问题,因为字符串是不可变的,频繁的字符串...

    java代码-3.编写一个程序判断字符串“Tom”是否在另一个字符串“I am Tom, I am from China”中出现。

    在Java编程语言中,字符串操作是非常常见的任务,其中包括判断一个字符串是否包含在另一个字符串中。在给定的标题和描述中,我们面临的问题是检查字符串"Tom"是否存在于字符串"I am Tom, I am from China"中。这可以...

    java代码-编写一个程序判断字符串“Tom”是否在另一个字符串“I am Tom, I am from China”中出现。

    这是一个简单的Java程序,用于演示如何使用indexOf()方法检查一个字符串是否包含在另一个字符串中。 1. 运行程序,按提示输入主字符串。 2. 输入后,程序会自动检查"Tom"是否存在于输入的字符串中。 3. 结果将在...

    求字符串中的第一个数字

    根据给定的信息,我们可以分析并总结出以下与“求字符串中的第一个数字”相关的知识点: ### 1. 字符串操作基础 #### 1.1 字符串简介 在 Java 中,`String` 类用于表示不可变的字符序列,即字符串。字符串在 Java ...

    Arduino 分割字符串库,strFenGe.rar

    1. **Arduino String 类**: Arduino IDE 提供了一个名为 `String` 的类,它允许我们创建、操作和管理字符串。`String` 类提供了许多方法,如 `concat()`, `substring()`, `indexOf()`, `charAt()` 等,用于对字符串...

Global site tag (gtag.js) - Google Analytics