java字符串中搜索子串

 
package com.duapp.itfanr;

import java.util.*;

public class CharDemo {

	public static void main(String args[]) {

		String str = "abcdabegababefgab";
		// char charVect[]=str.toCharArray();
		String subStr = "ab";
		int lenSub = subStr.length();
		int count = 0;
		for (int i = 0; i < str.length() - lenSub+1 ; i++) {
			StringBuffer sb = new StringBuffer(str.subSequence(i, i + lenSub));
			if (compare(sb.toString(), subStr))
				count++;
		}
		System.out.println(count) ;//此处结果为5
	}

	static boolean compare(String str, String subStr) {
		// boolean flag ;

		if (str.equals(subStr))
			return true;
		else
			return false;
	}

}
 
package com.handy.ds;  

import JAVA.util.Stack;  
import java.util.Arrays;  

;  

public class TestString {  

    /** 
     * @param args 
     */  
    public static void main(String[] args) {  
        // TODO Auto-generated method stub  
        TestString ts = new TestString();  
        System.out.println(ts.compareTo1("abababab", "bab"));  
        System.out.println(ts.compareTo2("abababab", "bab"));  
        System.out.println(ts.compareTo3("abababab", "bab"));  

    }  

    // 想法:如str1=ababac,str2=ab  
    // 往后取str1的所有str2长度(2)的组合,ab,ba,ab,ba,ac  
    // 将这些组合分别与str2比较,相等则count+1  

    public String compareTo1(String str1, String str2) {  

        String ss = null;  
        int count = 0;  
        for (int i = 0; i <= str1.length() - str2.length(); i++) {  
            ss = str1.substring(i, i + str2.length());  
            if (ss.equals(str2))  
                count++;  

        }  

        return String.valueOf(count);  
    }  

    // 想法:如str1=ababac,str2=ab  
    // 往后取str1的所有2长度(2)的组合,ab,ba,ab,ba,ac  
    // 将这些组合分别与str2比较,相等则count+1  
    // 跟第一种方法类似,不过用栈来存罢了  
    public String compareTo2(String str1, String str2) {  
        Stack s = new Stack();  

        int count = 0;  
        for (int i = 0; i <= str1.length() - str2.length(); i++) {  
            s.add(str1.substring(i, i + str2.length()));  

        }  
        int i = 0;  
        while (s.size() != 0) {  
            if (s.pop().toString().equals(str2))  
                i++;  

        }  
        return String.valueOf(i);  

    }  

    // 想法:找到str1中与str2第一个字母相同的位置,然后往后取与str2相同长度的子串,和str2比较,相等则count+1  
    // 如str1=abcab,str2=ab, str1中a与str2的a相同,往后取ab,与str2相等,count+1  
    // 然后取bc,ca,ab 又有一个ab 故count=2  
    public String compareTo3(String str1, String str2) {  
        int count = 0;  
        int i = 0;  
        String temp = null;  
        char c;  
        boolean isCount = false;  

        if (str1.length() < str2.length())  
            return "0";  
        while (str2.length() + i <= str1.length()) {  

            c = str1.charAt(i);  

            if (c == str2.charAt(0)) {  
                temp = str1.substring(i, i + str2.length());  
                isCount = true;  
            } else  
                isCount = false;  
            if (isCount && temp.equals(str2))  
                count++;  
            i++;  

        }  

        return String.valueOf(count);  
    }  
}
参考: [1].http://www.bcwhy.com/thread-9864-1-1.html

转载于:https://my.oschina.net/itfanr/blog/358490

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值