zoukankan      html  css  js  c++  java
  • 手写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
    
  • 相关阅读:
    CF 7C. Line(扩展欧几里德)
    HDU 1700 Points on Cycle(向量旋转)
    POJ 1673 EXOCENTER OF A TRIANGLE(垂心)
    SRM 594 DIV1 250
    Codeforces Round #207 (Div. 1) A. Knight Tournament(STL)
    POJ 1654 Area(水题)
    POJ 1474 Video Surveillance(半平面交)
    POJ 1473 There's Treasure Everywhere!
    POJ 1329 Circle Through Three Points(三角形外心)
    POJ 1279 Art Gallery(半平面交)
  • 原文地址:https://www.cnblogs.com/zhazhaacmer/p/11052624.html
Copyright © 2011-2022 走看看