我在JAVA程序中,读取文件数据时,需要判断数据的正确性.
其基本格式为:
"数字,任意字符串,任意字符串"------数字INT或LONG型,中间用,号分隔
当文件中有空行(分包括空格和不包括空格)及数据的第一个字段不是数字时,或不符合这种格式 都要提示文件数据有错...
我做了好久,都没能 组织清楚,请高手帮忙.
其基本格式为:
"数字,任意字符串,任意字符串"------数字INT或LONG型,中间用,号分隔
当文件中有空行(分包括空格和不包括空格)及数据的第一个字段不是数字时,或不符合这种格式 都要提示文件数据有错...
我做了好久,都没能 组织清楚,请高手帮忙.
import java.util.regex.*;
public class TestString{
public static void main(String[] args)throws Exception{
String s ="1,aadafa,b";
Pattern pa = Pattern.compile("^\\d+(,[a-zA-z]+){2}$");
Matcher ma = pa.matcher(s);
if(ma.find()){
System.out.println("ok");
}
}
}
"^\\d+(,[a-zA-z]+){2}$"^表示起始符,$表示终结符,
\d表示数字,\需要转义,所以再加个\,+表示1个或多个\\d+就是若干个数字的意思
[a-zA-Z]+表示大小写字母若干个(就是楼主说的任意字符串),(,[a-zA-Z+]){2})表示两个",任意字符串"另外,一般的匹配都是贪婪匹配,就是假如给定一个"abc,33,aa,bb,cc,cc"用"\\d+(,[a-zA-z]+){2}"也能匹配(33,aa,bb),只不过匹配的位置不是从头开始,到尾结束,所以这里用^和$来限制一下
但在JAVA中支持的符号集是UNICODE不是ASCII码制,也就是说,任意字符串,不仅包括大小写的字母,还包括中文汉字,或其他一些罗马字等等一系列的字符.....
两位的程序都限制了,只在大小写的英文字母间..的任意字符串..
public class Format {
private String src; public Format(String src) {
this.src = src;
} public boolean test() {// format: data,string,string
if(src==null)
return false;
String str[] =src.split(",{1}");
if(src.endsWith(","))
return false;
if(str.length!=3)
return false;
try{
Integer.parseInt(str[0]);
}catch(Exception e1){
try{
Long.parseLong(str[0]);
}catch(Exception e2){
return false;
}
}
if(str[1].length()==0 || str[2].length()==0)
return false;
return true;
} /*public static void main(String args[]) {
System.out.println(new Format(null).test());
}*/
}
Pattern pa = Pattern.compile("[\u4E00-\u9FA0]*",Pattern.CANON_EQ);