/*
* 面试题:判断一个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 />域名真多,不想再谈域名细节的问题,只是想知道这样做的思路对不对?