JAVA正则表达式
我灰常鸡冻,AC了一个188人AC的题目,开始死活RE,让人不禁脑残,理论上按题目描述接收split的string数组开到2足足够,但是HH大牛还是执着的提出了数组越界的可能,后来看那个大小为5的数组有点太葛朗台,索性改成105(可是明明2个就够了啊,啊,啊,啊,f**k),然后交:AC,靠。脑残+1,贼么可能呢!难道题目描述又在玩人,把105重新改作5再交:AC,贼让人情以何堪……
教训:AC不是终极目的,程序对了才是目的。。。管他娘的AC还是RE……
PS:java的正则表达式真是让我越来越震精了,学了正则表达式有种学会一种新语言的快感!然后,我没有无形中暗示CPP不好咋滴,其实CPP也有正则表达式的功能,sscanf和ssprintf可见一斑。
唉,188/502 悸动啊
import java.io.*;
import java.util.*;
import java.util.regex.*;
import java.text.*;
public class Main
{
public static void main(String[] args)
{
Scanner pz=new Scanner(new BufferedInputStream(System.in));
String str;
String[] ss=new String[5];//明明一个足够了,因为输入表示只会在字串首部或末尾有空格
//ms也能一个表达式搞定所有的情况,无奈脑容量有限,想不出
Pattern pata=Pattern.compile("\\s*[+|-]?\\d+\\.\\d+[e|E][+|-]?\\d+\\s*");//匹配类似 +4.1234567890E-99999 或+4.13E99
Pattern patb=Pattern.compile("\\s*[+|-]?\\d+\\.\\d+\\s*");//匹配类似 1.2
Pattern patc=Pattern.compile("\\s*[+|-]?\\d+[e|E][+|-]?\\d+\\s*");//匹配类似 1e-12
Matcher mat=null;
while(pz.hasNext())
{
str=pz.nextLine();
if(str.charAt(0)=='*')
break;
ss=str.split(" ");
for(int i=0;i<ss.length;++i)
System.out.print(ss[i]);
mat=pata.matcher(str);
if(mat.matches())
System.out.println(" is legal.");
else
{
mat=patb.matcher(str);
if(mat.matches())
System.out.println(" is legal.");
else
{
mat=patc.matcher(str);
if(mat.matches())
System.out.println(" is legal.");
else
System.out.println(" is illegal.");
}
}
}
}
}
相关文档:
时间过的真快,不知不觉来到传智播客已经一个多月了,这一个月主要学习了Java基础部分,虽然每天都是敲代码到晚上1、2点才睡觉,但是还是感觉时间不够用,因为需要学习巩固的东西太多太多了,总感觉掌握的不够好,这一个月过的很累但也很充实。
这几天开始 ......
对于防御性编程而言,assert一直都是非常重要的工具。但对于熟悉-ea参数的Java程序员而言,当他们看到所有Groovy断言无论是否有-ea都照样执行时一定会非常困惑。
事实上,Groovy的断言是无条件开启的!
对此,开发人员Roshan Dawrani做了如下解释:(原文)
The JDK documentation has a long chapter on assertions tha ......
1.java类库自带的方法:
1、public boolean isNumber(String str)
{
if(java.lang.Character.isDigit(msg.charAt(0))){
return true;
}
return false;
}
}
2.更新:用正则表达式
首先要import java.util.regex.Pattern 和 java.util.regex.Matcher
这两个包,或者不导 ......