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正则表达式)