`

模仿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()

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

    本文实例讲述了C#判断一个字符串是否包含另一个字符串的方法。分享给大家供大家参考。具体如下: string a=china; string b=i; if (a.IndexOf(b) &gt; -1) { //包含指定的字符串,执行相应的代码 } 希望本文所述对...

    java字符串替换 代码转换相关源码.rar

    java字符转换类代码,可以实现判断字符串是否为空,并删除首尾空格,字符串替换函数,代码转换,GBK转换为ISO-8859-1,代码转换 从srcCode转换为destCode,代码转换,GBK转换为big5,替换非法字符,标记本身等于分隔...

    C#判断字符串中是否包含指定字符串及contains与indexof方法效率问题

     string.Contains是大小写敏感的,如果要用该方法来判断一个string是否包含某个关键字keyword,需要把这个string和这个keyword都转成小写或大写再调用Contains方法; string key = bbb; string temp = aaaBBBccc...

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

    下面的JS代码,为String对象定义了一个contains方法用于判断字符串是否包含子字符串,非常有用。 if (!Array.prototype.indexOf) { Array.prototype.indexOf = function(obj, start) { for (var i = (start || 0)...

    String.prototype.contains:检查传递数组中的至少一个字符串是否包含在字符串中

    String.prototype.contains提案问题假设我想检查一个字符串是否包含多个字符串中的至少一个其他字符串: 在 ES5 var str = 'Hello this is a string' ;// Using regex:/ Hello | is / . test ( str ) ; // true// ...

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

    本文实例讲述了js判断一个字符串是否包含一个子串的方法。分享给大家供大家参考。具体如下: 在我们前端日常开发中,经常会遇到判断一个字符串中是否包含某个子串,这里我们将去探究一些解决此种需求的方法以及正确...

    .net indexOf(String.indexOf 方法)

    public indexOf(value:String, [startIndex:Number]) : Number 搜索字符串,并返回在调用字符串内 startIndex 位置上或之后找到的 value 的第一个匹配项的位置。此索引从零开始,这意味着字符串中的第一个字符被视...

    javascript 判断字符串是否包含某字符串及indexOf使用示例

    通过判断指定目录实现广告的显示 代码如下... } indexOf用法: 返回 String 对象内第一次出现子字符串的字符位置。 strObj.indexOf(subString[, startIndex]) 参数 strObj 必选项。String 对象或文字。 subString 必选项

    StringAPI.java

    boolean startsWith(String prefix):测试此字符串是否以指定的前缀开始 boolean startsWith(String prefix, int toffset):测试此字符串从指定索引开始的子字符串是否以指定前缀开始 int length():返回字符串...

    String.prototype.containsAll:检查传递数组中的所有字符串是否都包含在字符串中

    假设我想检查一个字符串是否包含一堆字符串: 在 ES5 var str = 'Hello this is a string' ; // Using good old indexOf str . indexOf ( 'Hello' ) &gt; - 1 && str . indexOf ( 'is' ) ; // true // Using ES6 ...

    费_feaa_字符串之间的包含关系_

    1 string a b; Console.WriteLine(&quot;...-1) //判断字符串之间是否包含 { Console.WriteLine(&quot;两个字符串连接为:&quot; + a + b); } else { Console.WriteLine(&quot;两个字符串为:{0}{1}&quot; a b); }

    javascript基本教程

    indexOf() 用法: 字符串对象&gt;.indexOf( 另一个字符串对象&gt;[, 起始位置&gt;]);该方法从 字符串对象&gt;中查找 另一个字符串对象&gt;(如果给出 起始位置&gt;就忽略之前的位置),如果找到了,就返回它的位置,没有找到就返回“-...

    字符串完整版.pdf

    2. int IndexOf(string str):找到你所指定的字符串在源字符串中第一次出现的位置(索引从0开始计算) ,如果没有找到则返回-1 3. int IndexOf(char ch) 4. int LastIndexOf(int ch);找到你所指定的字符串在源字符串...

    LeetCode判断字符串是否循环-leetCode-practice:每日一题

    思路:取第一个字符串为判断的字符串,循环使用String.indexOf()判断是否是以这个字符串开头的,如果是则进入下一个字符串判断,如果不是则使用subString来截取字符串,如果截取到的字符串为空则返回"";

    String.indexOf()实现

    public static void main(String[] args) { String haystack = "aaaaasdfasof"; String needle = "df"; char[] hs = haystack.toCharArray... //haystack是空字符串时needle是空返回0否则-1 if (0 &gt;= hl) { System

    javascript函数大全

    变量.indexOf("字符",起始位置),返回第一个出现的位置(从0开始计算) 97.string.lastIndexOf(searchString[,startIndex])最后一次出现的位置. 98.string.match(regExpression),判断字符是否匹配. 99.string....

    JS判断字符串包含的方法

    本文实例讲述了JS判断字符串包含的方法。分享给大家供大家参考。具体如下: 1. 例子: var tempStr = "tempText" ; var bool = tempStr.indexOf("Texxt"); //返回大于等于0的整数值,若不包含"Text"则返回"-1。 if...

    js字符串操作.docx

    将两个或多个字符的文本组合起来,返回一个新的字符串。 var a = "hello"; var b = ",world"; var c = a.concat(b); alert(c); //c = "hello,world" indexOf 返回字符串中一个子串第一处出现的索引(从左到右搜索)...

    java字符串操作大全

    7、regionMatches() 用于比较一个字符串中特定区域与另一特定区域,它有一个重载的形式允许在比较中忽略大小写。  boolean regionMatches(int startIndex,String str2,int str2StartIndex,int numChars)  ...

Global site tag (gtag.js) - Google Analytics