7-1 水文数据校验及处理
作者:互联网
此题咋看之下很复杂,似乎比求导还要繁琐,其实不然,此题只需要在分割字符串后对单独项进行检验,之后根据检验结果作出相对应的输出即可。
1.对字符串进行分割处理
1)对于输入的字符串我们可以这样处理,首先检验字符串非空,通过判断字符串长度是否为0,可以选择跳出此处循环,或继续执行下一行代码
if(s.length()==0) continue
2)对于非空数据,我们再对其进行整体判断是否能被|恰好分割为5部分,通过使用自定义的boolean函数来判断是否数据合法,根据题目要求,每一条这样的数据我们需要输出"Wrong Format"及该条数据。
//预处理字符串,返回分割后字符串数组 String [] arrayString=Preprocessing(s); //检验整体合法 if(!checkArray(arrayString)){ System.out.println("Wrong Format"); System.out.println("Data:"+s); continue; } //去除两端空格,同时根据|来切开字符串,检验该数据是否是由|分开的5部分 public static String []Preprocessing(String s){ return s.trim().split("\\|"); } //对返回字符串数组进行检验 public static boolean checkArray(String[] s){ if(s.length!=5) return false; return true; }
2.对字符串各部分进行合法判断
对于分割后产生的5部分字符串,由于题目要求不仅要判断合法性,还需要我们指出错误行数,和列数,我们需要对其进行分开检验。
大体思路为先使用正则表达式对其进行合法检验,只要检测到该数据不合法便可以直接输出,所在行数我们可以使用一个计数器变量来记录这是第几条数据,将其作为参数传入自定义的检验函数中,所在列数我们可以根据该字符串再切割后的字符串数组的索引+1得到。
好了,有了这样的大体思路,我们就可以愉快的写出各个数据的正则啦。具体如下:
// /所有年份 /1-12都有1-28 / 1,3,5,7,8,10,12都有1-31天 /除2月外 都有29-30天
String regex1="(?:((?:([1-9]([0-9]{0,3}))/((?:(([1-9]|(1[0-2]))/(?:([1-9]|([1-2][0-8])|19))))|(?:(([13578])|([1][02])(/31)))|(?:(([13-9]|1[02])/(29|30)))))(?:(?:( [02468]| 1[02468]| 2[02]|):00))))";
//闰年正则,可写可不写,某个坑人的老师骗我写闰年准则,美好的青春就这样在掉头发的时光中度过了
//1或2位闰年 /3,4位闰年 //400年一润,百年不润 String regex2="(?:((?:([48]|[2468][048]|[13579][26]))|((?:(([1-9]([0-9]?))?:(0[48]|[2468][048]|[13579][26])))|(?:([48]|[2468][048]|[13579][26])00))/2/29)(?:(?:( [02468]| 1[02468]| 2[02]|):00)))"; String regexend=regex1+"|"+regex2;
//水位数据正则 目标水位、实际水位、流量:均为实型数,取值范围为[1,1000), 小数点后保留1-3位小数或无小数(也无小数点) String water ="(?:(?:(([1-9]([0-9]{0,2})))(?:((.[0-9]{1,3})?))))"; //开度正则 String hot="(?:(([1-9])(?:(.[0-9]{2}))))"; //流量正则同水位
对于以上检验,
1)在函数设立局部变量,用来统计是否有不合法的数据,只要有不合法数据,该条数据整体就需要打印
2)可以在类中设立全局变量,用来统计是否有不合法的数据,只要存在不合法数据,便修改标记,用来作为最后是否需要打印最大实际水位和总流量
if(mark==0){ System.out.printf("Max Actual Water Level:%.2f\n",mmax); System.out.printf("Total Water Flow:%.2f\n",sum); }
目前只是提及了大致思路和正则,一些类似去掉两边空格,和实际开度过高打印并未提及,整体代码将在作业查重后上传~,博主也怕挂科
标签:String,处理,校验,检验,合法,正则,字符串,水文,数据 来源: https://www.cnblogs.com/kaixin27/p/14643767.html