今天心血来潮想了一种本办法算字符串里的“java”出现过多少次过程如下:
public class getjavanum{
public static void main(String[] args){
String s = "sunjavaapplejavapublicjavaoraclejava";
int countNum = 0;
for(int i=0 ;i<s.length()-3 ;i++){
if("j".equals(s.charAt(i)) && "a".equals(s.charAt(i + 1)) && "v".equals(s.charAt(i + 2)) && "a".equals(s.charAt(i + 3))){
countNum ++;
}
}
System.out.println("java出现了" + countNum + "次");
}
}
虽说是笨办法,但是本人还是觉得可以得出正解的,但事实相反,始终都是“java出现了0次”的蛋疼结果,求高人指点

解决方案 »

  1.   

    你拿String和Character(本来是char,放在equals方法中,auto-boxing了,变为Character的一个对象)做比较了,可以修改如下:public class Test {
    public static void main(String[] args) {
    String s = "sunjavaapplejavapublicjavaoraclejava";
    int countNum = 0;
    for (int i = 0; i < s.length() - 3; i++) {
    if ('j' == s.charAt(i) && 'a' == s.charAt(i + 1)
    && 'v' == s.charAt(i + 2) && 'a' == s.charAt(i + 3)) {
    countNum++;
    }
    }
    System.out.println("java出现了" + countNum + "次");
    }
    }
      

  2.   

    s.charAt(i)返回的是字符char,"j"这样的是字符串对象,所以equals不会是true的
    if ('j' == s.charAt(i) ... so on 
      

  3.   

    为啥用for呢....这样呢?public class Test {
        public static void main(String[] args) {
            String s = "sunjavaapplejavapublicjavaoraclejava";
            String[] len = aa.split("java");        System.out.println("java出现了" + len.length + "次");
        }
    }
      

  4.   

    为啥用for呢....这样呢?
    Java codepublic class Test {
        public static void main(String[] args) {
            String s = "sunjavaapplejavapublicjavaoraclejava";
            String[] len = s.split("java");        System.out.println("java出现了" + len.length + "次");
        }
    }
      

  5.   

    有bug        String s = "sunjavaapplejavapublicjavaoraclejavaa";
            String[] len = s.split("java");        System.out.println("java出现了" + len.length + "次");java出现了5次
      

  6.   


    public class Test { static final String SOURCE_STRING_01 = "sunjavaapplejavapublicjavaoraclejavaa";
    static final String SOURCE_STRING_02 = "java";
    static final String SOURCE_STRING_03 = null;
    static final String VALUE_STRING = "java";

    public static void main(String[] args) {
    System.out.println(getCount(SOURCE_STRING_01, VALUE_STRING));
    System.out.println(getCount(SOURCE_STRING_02, VALUE_STRING));
    System.out.println(getCount(SOURCE_STRING_03, VALUE_STRING));
    } static int getCount(String source, String value) {
    if (source == null || !source.contains(value)) {
    return 0;
    } else {
    source = " " + source + " ";//避免首尾出现value字符串造成错误
    String[] lens = source.split(value);
    //这里要减1,因为lens.length是分割后字符串数组的长度,分割符的数量=数组长度减1
    return lens.length - 1;
    }
    }
    }
      

  7.   


    也可以安装下面的写:
    public static void main(String args[])
    {
                    String s = "sunjavaapplejavapublicjavaoraclejava";
    int countNum = 0;
    for(int i=0 ;i<s.length()-3 ;i++){
    if("j".equals(s.substring(i, i+1)) && "a".equals(s.substring(i+1, i+2)) && "v".equals(s.substring(i+2, i+3)) && "a".equals(s.substring(i+3, i+4))){
    countNum ++;
    }
    }
    System.out.println("java出现了" + countNum + "次");
    }
      

  8.   

    对对,这个如果首尾都含有该字符串的话,length就减2,需要增加个判断
    但是一定比for运行要快些
      

  9.   

    对对,这个如果首尾都含有该字符串的话,length就减2,需要增加个判断
    但是一定比for运行要快些
      

  10.   


    //这样会不会更简单呢
    System.out.println(s.split("java",-1).length-1);
      

  11.   

            String test ="javaapplejavapublicjavaoraclejava";
            String java ="java";
            System.out.println((test.length()-test.replace(java,"").length())/java.length());
      

  12.   

    if ("j".equals(String.valueOf(s.charAt(i))) && "a".equals(String.valueOf(s.charAt(i + 1))) && "v".equals(String.valueOf(s.charAt(i + 2))) && "a".equals(String.valueOf(s.charAt(i + 3)))) {这样就可以了
    charAt返回的char类型,不可能跟string相等的虽然这样是对的,我想楼主也知道这方法有点不效率了
      

  13.   

    有通用检测的算法 public int getSpecificStringCount(String str, String subStr) {
    if (subStr.length() > str.length()) {
    return 0;
    } int count = 0;
    for (int i = 0; i < str.length() - subStr.length() + 1; i++) {
    if(str.charAt(i) == subStr.charAt(0)) {
    boolean match = true;
    for(int j = 1; j<subStr.length(); j++) {
    if(str.charAt(i+j) != subStr.charAt(j)){
    match = false;
    break;
    }
    }

    if(match){
    count++;
    i += subStr.length();
    }
    }
    } return count;
    }
      

  14.   

    public class getjavanum{
    public static void main(String[] args){
    String s = "sunjavaapplejavapublicjavaoraclejava";
    int countNum = 0;
    for(int i=0 ;i<s.length()-3 ;i++){
    if("j".equals((String.valueOf(s.charAt(i)))) && "a".equals(String.valueOf(s.charAt(i + 1))) && "v".equals(String.valueOf(s.charAt(i + 2))) && "a".equals(String.valueOf((s.charAt(i + 3))))){
    countNum ++;
    }
    }
    System.out.println("java出现了" + countNum + "次");
    }
    }
      

  15.   

    public static void main(String args[]){
                    String s = "sunjavaapplejavapublicjavaoraclejava";
    Pattern p = Pattern.compile("java");
    Matcher m = p.matcher(s);
    int count = 0;
    while(m.find()) count++;
    System.out.println(count);
    }