/*
* 面试题:判断一个email字符串的格式是否正确,不能使用正则表达式,用标准的程序流程图写出来
*/
当时都email的格式都不太了解,回查了下才知道大概,重新做了下不知道还有没有更好的方法
public class EmailFormat {
public static void main(String[] argsd) {
System.out.println(isEmail("Johosf@fdsf@fdfs.com"));
}
public static boolean isEmail(String emailStr) {
//判断字符串是否以下面字符结尾
if(emailStr.endsWith(".com")|| emailStr.endsWith(".com.cn")
|| emailStr.endsWith("educ.cn")
|| emailStr.endsWith(".net")
|| emailStr.endsWith(".gov.cn")
|| emailStr.endsWith(".org.cn")
) {
//截取"."之前的字符串
emailStr = emailStr.substring(0, emailStr.indexOf('.'));
//以“@”分割字符串
String[] strs = emailStr.split("@");
//判断是否只有一个“@”,也就是数组判断数组长度是否等于2
if(strs.length ==2 ) {
for(String str : strs) {
//判断字符串是否以"_"开始,是就直接返回false
if(str.startsWith("_")) {
return false;
}
}
for(char c : strs[0].toCharArray()) {
//判断字符串里的每个字符是否都属于1-9,a-z,A-Z,或者"-",如果不是就是直接返回false
if(!((c>=65&&c<=90)
|| (c>=95&&c<=122)
|| c=='_')) {
return false;
}
}
return true;
}
}
return false;
}
}
问题补充:
public static void main(String[] argsd) {
System.out.println(isEmail("joso.hoo@fdsaf-fdfs.com"));
}
public static boolean isEmail(String emailStr) {
if(!emailStr.contains("@")) {return false;}
//判断字符串是否以下面字符结尾,是就去掉它,如果都不是就返回false
if(emailStr.endsWith(".com")) {
emailStr = emailStr.substring(0, emailStr.indexOf(".com"));
} else if(emailStr.endsWith(".com.cn")) {
emailStr = emailStr.substring(0, emailStr.indexOf(".com.cn"));
} else if(emailStr.endsWith(".edu.cn")) {
emailStr = emailStr.substring(0, emailStr.indexOf(".edu.cn"));
} else if(emailStr.endsWith(".net")){
emailStr = emailStr.substring(0, emailStr.indexOf(".net"));
} else if(emailStr.endsWith(".gov.cn")){
emailStr = emailStr.substring(0, emailStr.indexOf(".gov.cn"));
} else if(emailStr.endsWith(".org.cn")){
emailStr = emailStr.substring(0, emailStr.indexOf(".org.cn"));
} else {
return false;
}
//以“@”分割字符串
String[] strs = emailStr.split("@");
//判断是否只有一个“@”,也就是数组判断数组长度是否等于2
if(!(strs.length ==2) ) {
return false;
} else if(strs[0].charAt(0) == '-' || strs[0].charAt(0) == '_' || strs[0].charAt(0) == '.'
|| strs[1].charAt(0) == '-' || strs[1].charAt(0) == '_' || strs[1].charAt(0) == '.') {
return false;
} else {
//判断字符串里的每个字符是否都属于1-9,a-z,A-Z,或者"_" "-" ".",如果不是就是直接返回false
for(char c : strs[0].toCharArray()) {
if(!((c>=65&&c<=90) || (c>=95&&c<=122) || c=='_' || c=='-' || c=='.')) {
return false;
}
}
//判断字符串里的每个字符是否都属于1-9,a-z,A-Z,或者"-" ,如果不是就是直接返回false
for(char c : strs[1].toCharArray()) {
if(!((c>=65&&c<=90) || (c>=95&&c<=122) ||c=='-')) {
return false;
}
}
return true;
}
}</pre><br /><strong>问题补充:</strong><br /><span style="color: red">以上改进了一下,大家看一下还有没有问题,当时手写这道笔试题真是痛苦</span><br /><strong>问题补充:</strong><br />域名真多,不想再谈域名细节的问题,只是想知道这样做的思路对不对?