关于字符串有关方法的灵活使用--排除漏洞------------>大家请进
//现在的情况是我输入1@. 程序也算我输对了。想用关于字符串的有关方法解决此问题,不知有可能不。当然其它方法也是可以的。大家来出出主意吧。感谢。
import java.util.*;
public class Accp9_5 {
public static void main(String[] args) {
boolean fileCorrect=false;
boolean emailCorrect=false;
System.out.println("――欢迎进入作业提交系统―――");
Scanner input=new Scanner(System.in);
System.out.println("请输入JAVA文件名: ");
String filename=input.next();
System.out.println("请输入你的邮箱 : ");
String email=input.next();
int index=filename.lastIndexOf(".");
if(index!=-1&&index!=0&&filename.substring(index+1,filename.length()).equals("java")){
fileCorrect=true;
}else{
System.out.println("文件名无效!!!");
}
if(email.indexOf('@')!=-1&&email.indexOf('.')>email.indexOf('@')){
emailCorrect=true;
}
else{
System.out.println("E-mail无效!!!");
}
if(fileCorrect&&emailCorrect){
System.out.println("作业提交成功!");
}else{
System.out.println("作业提交失败!!!");
}
}
}
----------------解决方案--------------------------------------------------------
回复 楼主 gameohyes
用正则表达式
String有一个方法
public boolean matches(String regex)
告知此字符串是否匹配给定的正则表达式。
调用此方法的 str.matches(regex) 形式与以下表达式产生的结果完全相同:
Pattern.matches(regex, str)
参数:
regex - 用来匹配此字符串的正则表达式
返回:
当且仅当此字符串匹配给定的正则表达式时,返回 true
抛出:
PatternSyntaxException - 如果正则表达式的语法无效
从以下版本开始:
1.4
另请参见:
Pattern
邮箱的的正则表达式可以简单表式为:"/w+@/w+/./w+" ps:好像是这样 你也可以查下 /w+即字母或数字1个或多个 然后一个"@" 再一个.(/.转义成.)
----------------解决方案--------------------------------------------------------
Sorry 没懂意思
----------------解决方案--------------------------------------------------------
LZ的意思是不是当你输入不正确的E-MAIL也算对??
其实设计这个程序时,没有对它有太多的约束,比如没有去验证后面的几位是否是.com
LZ如果想完善一点的话就自己加个约束进去就可以了。
----------------解决方案--------------------------------------------------------
通过什么约束语句来实现
辛苦改动下吗?麻烦了。
----------------解决方案--------------------------------------------------------
回复 5楼 gameohyes
使用正则表达式,不要自己写底层代码去判断了,那是浪费脑细胞
伪代码:
String regex=".*\\.java"; \\java文件的正则表达式
if(filename.matches(regex)) { 是java文件 }
else{ 不是java文件 }
[
本帖最后由 usbboy2009 于 2009-8-9 10:57 编辑 ]
----------------解决方案--------------------------------------------------------
回复 6楼 usbboy2009
帮改下。感谢
package accp9;
import java.util.*;
public class Accp9_5 {
public static void main(String[] args) {
System.out.println("――欢迎进入作业提交系统―――");
Scanner input=new Scanner(System.in);
System.out.println("请输入JAVA文件名: ");
String filename=input.next();
System.out.println("请输入你的邮箱 : ");
String email=input.next();
String regex="*\\.java" ; //java文件的正则表达式
if(filename.matches(regex)) {
System.out.println("正确!!!");
}else{ System.out.println("文件名无效! !!");}
String regex1="*\\@163.com||*\\@126.com||*\\@qq.com||*\\@vip.qq.com||*\\@163.net||*\\@188.com" +
"||*\\@sohu.com||*\\@tom.com||*\\@yahoo.com||*\\@yahoo.com.cn||*\\@sina.com||*\\@gmail.com"+
"||*\\@hotmail.com" ;
if(email.matches(regex1)){
System.out.println("正确!!!");
}
else{
System.out.println("E-mail无效!!!");
}
if(filename.matches(regex)&&email.matches(regex1)){
System.out.println("作业提交成功!");
}else{
System.out.println("作业提交失败!!!");
}
}
}
----------------解决方案--------------------------------------------------------
回复 7楼 gameohyes
我把regex和regex里的*都改成了+ 优化下判断,要不你输入没有名字的.java也算对
改后程序里“+”前面应该有个“.”注意
实际上你还可以优化判断表达式:比如email中不能用数字开头,用户名中不能使用特殊字符等
import java.util.*;
public class Accp9_5 {
public static void main(String[] args) {
System.out.println("――欢迎进入作业提交系统―――");
Scanner input=new Scanner(System.in);
System.out.println("请输入JAVA文件名: ");
String filename=input.next();
System.out.println("请输入你的邮箱 : ");
String email=input.next();
String regex=".+\\.java" ; //java文件的正则表达式
if(filename.matches(regex)) {
System.out.println("正确!!!");
}else{ System.out.println("文件名无效! !!");}
String regex1=".+\\@163.com||.+\\@126.com||.+\\@qq.com||.+\\@vip.qq.com||.+\\@163.net||.+\\@188.com" +
"||.+\\@sohu.com||.+\\@tom.com||.+\\@yahoo.com||.+\\@yahoo.com.cn||.+\\@sina.com||.+\\@gmail.com"+
"||.+\\@hotmail.com" ;
if(email.matches(regex1)){
System.out.println("正确!!!");
}
else{
System.out.println("E-mail无效!!!");
}
if(filename.matches(regex)&&email.matches(regex1)){
System.out.println("作业提交成功!");
}else{
System.out.println("作业提交失败!!!");
}
}
}