java String 方法实战(统计字符串个数、邮箱验证)

题目一:统计字符串个数

题目描述:任意一段字符串,从中查找某一字符串出现的次数

查找字符串"sfjavasfdsjavafsjavafsjava",中java出现的次数

方法一:

思路:通过,valueOf 查找字符串方法,进行统计,但是该方法,只会返回第一个出现的次数,要用valueOf (“str”,“fromindex”),进行判断

具体看代码:

public class Test1 {
    public static void main(String[] args) {
        String str = "sfjavasfdsjavafsjavafsjava";
        System.out.println("查找字符串为:"+str);
        int len1 =findJava1(str);
        System.out.println("方法一结果:"+len1);
    }
    public static int findJava1(String s) {
        int account = 0;  //统计java出现次数
        int index = -1;  //记录java 出现的位置
        String find = "java";
        int findLen = find.length();
//        记录第一次出现的位置
        index  = s.indexOf("java");
        account++;
        while(true) {
            index  = s.indexOf("java",index+findLen);
            if(index==-1) {
                break;
            }
            account++;
        }
        return  account;
    }
}

运行结果:

java 字符串的字符统计 java统计字符串字符个数_java 字符串的字符统计

方法二:

思路:通过substring 截取字符串的方法,从左往右,每次出现java,就把java以及前面的代码都截取掉,重复判断

具体看代码:

public class Test1 {
    public static void main(String[] args) {
        String str = "sfjavasfdsjavafsjavafsjava";
        System.out.println("查找字符串为:"+str);
        int len2 =findJava2(str);
        System.out.println("方法二结果:"+len2);
    }
    public static int findJava2(String s) {
        int account =0;
        int index  =-1;
        String find = "java";
        int findLen = find.length();
        index = s.indexOf("java");
        while(true) {
//            截掉前面出现java的字符串
            s = s.substring(index + findLen);
            account++;
            index = s.indexOf("java");
//            判断是否还有java,再获取下一个java的位置
            if(index == -1) {
                break;
            }
        }
        return account;
    }

运行结果:

java 字符串的字符统计 java统计字符串字符个数_jvm_02

总结:这是两个不同的方法,虽然都用到了indexOf 方法, 第一个思路是把出现java之前的字符串都截掉,第二个是出现之后,记录位置,通过indexOf(str,fromindex)方法,查找下一个位置

用到了indexOf 方法, 第一个思路是把出现java之前的字符串都截掉,第二个是出现之后,记录位置,通过indexOf(str,fromindex)方法,查找下一个位置

题目二:邮箱验证

题目描述:

写一个验证邮箱是否正确的方法(基本验证即可)注意:这个题目主要目的是用来练习的,以后学历正则表达式,邮箱验证就非常方便了

1237471829@qq.com,是否为正确邮箱

  • 思路
  1. @.不能在开头和结尾
  2. @.有且只有一个
  3. @在.的前面
  4. @. 不能相邻

@ 的 indexOf 与 lastIndexOf要相等,不相等,说明不至一个人@或者 . 则不是正确邮箱

  • 代码测试
public class TestEmail {
    public static void main(String[] args) {
        String s = "1237471829@qq.com";
        System.out.println(checkEmail(s));
    }

    private static boolean checkEmail(String s) {
        int leftAtIndex = s.indexOf("@"); //记录@下标
        int leftPointIndex = s.indexOf("."); //记录 . 下标
        int rightAtIndex = s.indexOf("@"); //记录@下标
        int rightPointIndex = s.indexOf("."); //记录 . 下标
//        1. @.不能在开头和结尾
        if(s.startsWith("@")||s.startsWith(".")||s.endsWith("@")||s.endsWith(".")){
            System.out.println("@或者 . 不能在开头");
            return  false;
        }
//        2. @.有且只有一个
        if(leftAtIndex!=rightAtIndex||leftPointIndex!=rightPointIndex ) {
            System.out.println("@或者 . 只能出现一次");
            return  false;
        }
//        3. @在.的前面
        if(leftAtIndex>leftPointIndex) {
            System.out.println("@要在.的前面");
            return  false;
        }
//        4. @. 不能相邻
        if(leftAtIndex-leftPointIndex == -1) {
            System.out.println("@. 不能相邻");
            return  false;
        }
        return true;
    }

}

打印结果毫无疑问是true;

总结:

这道题主要是考验对indexOf、startsWith、endsWith 的基本使用,然后就是线性化代码,让代码思路简洁有条理,不要把代码都写在一堆