手写Java的字符串简单匹配方法IndexOf()

简单的字符串模式匹配算法,可使用KMP进行优化

	/**
	 * @param s1 母串
	 * @param s2 子串
	 * @return
	 */
	public static int myIndexOf(String str1,String str2) {
		int pos=-1;
		int index=0;
		char [] s1= str1.toCharArray();
		char [] s2= str2.toCharArray();
		
		if(str2.length()>str1.length() || str2.length()==0) {
			return -1;
		}
		/**
		 * offset 偏移量,注意不要越界也可以
		 */
		for(int i=0;i<s1.length;i++) {
			boolean flag=false;
			for(int offset=0;offset<s2.length;offset++) {
				if(i+offset>=s1.length || s1[i+offset]!=s2[offset]) {
					flag=true;
				}
			}
			if(flag==false) {
				pos=i;
				break;
			}
		}
		
		return pos;
	}

使用随机数类生成一个Long和Int数据进行测试,并与Java的方法进行对比

	public static void main(String[] args) {
		for(int i=1;i<50;i++) {
			String str1 = new String(new Long(new Random().nextLong()).toString());	
			String str2 = new String(new Long(new Random().nextInt(100)).toString());	
			System.out.println(str1);
			System.out.println(str2);
			System.out.println("String的----------------:"+str1.indexOf(str2));
			System.out.println("我的           ----------------:"+myIndexOf(str1, str2));
		}

	}

输出

-3622146795902383909
57
String的----------------:-1
我的           ----------------:-1
1679239383684246692
67
String的----------------:1
我的           ----------------:1
-1953669201709644975
39
String的----------------:-1
我的           ----------------:-1
6962415100876379873
10
String的----------------:7
我的           ----------------:7
-4904617570101049131
90
String的----------------:2
我的           ----------------:2
posted @ 2019-06-19 17:20  山枫叶纷飞  阅读(402)  评论(0编辑  收藏  举报