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;
}
}
运行结果:
方法二:
思路:通过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;
}
运行结果:
总结:这是两个不同的方法,虽然都用到了indexOf 方法, 第一个思路是把出现java之前的字符串都截掉,第二个是出现之后,记录位置,通过indexOf(str,fromindex)方法,查找下一个位置
用到了indexOf 方法, 第一个思路是把出现java之前的字符串都截掉,第二个是出现之后,记录位置,通过indexOf(str,fromindex)方法,查找下一个位置
题目二:邮箱验证
题目描述:
写一个验证邮箱是否正确的方法(基本验证即可)注意:这个题目主要目的是用来练习的,以后学历正则表达式,邮箱验证就非常方便了
1237471829@qq.com,是否为正确邮箱
- 思路
- @.不能在开头和结尾
- @.有且只有一个
- @在.的前面
- @. 不能相邻
@ 的 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 的基本使用,然后就是线性化代码,让代码思路简洁有条理,不要把代码都写在一堆