java 正则(2) 空行匹配
2016-01-11 13:09
507 查看
java 正则 空白行
图 1 写入\r 或\n 的结果相同
package test.java.RegExp; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; public class Order { public static void main(String[] args) throws IOException { //6.空白行问题,调用下面写文件函数和查看空行数函数 writeR(); System.out.println("文件 d:/out.txt 空行数为"+staticWhileLine("d:/out.txt")); } //查看文件空白行数目的函数 public static int staticWhileLine(String fileName){ FileReader fr = null; String line = null; int count = 0; int total = 0; int temp = 0; //这三个正则 "\\s*" "\\s{0}"和 上来一行啥也不写,直接换行是这个 "",用""正则表达式能把一行中啥也没有匹配出来,\\s{1} 匹配不出来""这个空串,也就是""不在\s里面 String regexContainN = "\\s*"; //单纯的\n , \r 也能被匹配到 //匹配任意空白行的正则表达式,包含开头就换行的(readLine()出来的结果是<span style="font-family: Arial, Helvetica, sans-serif;">"" </span><span style="font-family: Arial, Helvetica, sans-serif;">)</span> String regexNotN = "^[\\s&&[^\\n]]\\s*$"; //注意readline()出来的字符串中没有\n或\r,所以这个正则排除第一个字符是\n的字符串,没意义,因为readline() 出来的,根本不可能出现\n 开头的字符串。这个正则能匹配出开头必须有\t 等东西的空白行字符串,但是匹配不出来""这种行。 String regexForDigit = "\\d"; //这才是正则,故\\n 是正则,而\n 只是字符串换行符 try { fr = new FileReader(new File(fileName)); BufferedReader br = new BufferedReader(fr); //////////////////////用单个字符的AUSCII码匹配,能匹配出只含 \n 或\r 行的方法 ///////////////////////// // while((temp = br.read())!=-1 ){ //read 读字节,读出来了文件中的\r // System.out.println(temp);//是13,也就是\r的ausii 码,0xD.如果写文件是,\n,则读出来是10 ,0xA // total++; // if(temp==10) // 此处13代表 \r,10代表\n // { // count++; // System.out.println(line+total); //这个readLine方法底层调用的是Reader的read(char []) // } // } /////////////////任意空白行则用regexContainN 即\\s* 去匹配,如果不想包含""空串,可以用regexNotN 去匹配 //////////////// while((line = br.readLine())!=null ){ //readLine 这里是读取 \r 或者\n 之前的部分,不包括\r \n,所以这里你用\\n 去匹配 line,匹配不出来什么 total++; System.out.println(line);//是\r if(line.matches(regexContainN)) // { count++; System.out.println(line+total); //这个readLine方法底层调用的是Reader的read(char []) } } } catch (Exception e) { e.printStackTrace(); } return count;//空白行数为 } //这个函数是写文件,\r 或者\n, 这两者效果相同,结果文件如图1 public static void writeR()throws IOException{ FileWriter bw = null ; try { bw = new FileWriter("D:/out.txt"); for(int i=0;i<50000;i++) //此处的i取后16位,2的16次方能表示65536个字符,所以此处写50000都能显示。这里相当于我们把unicode大多数国家的字符都写了进去 bw.write("\n");// 只写\r是会在文件中换行的 bw.close(); } catch (IOException e) { e.printStackTrace(); } } }
图 1 写入\r 或\n 的结果相同
相关文章推荐
- intellij idea Error:java: Compilation failed: internal java compiler error
- 深入理解Java虚拟机 类加载子系统2
- cpu缓存java性能问题初探
- eclipse+webservice开发实例
- eclipse中导入svn的三种方式
- Java-命令行编译带包和带入第三方jar的java程序
- spring的controller中使用aop
- Eclipse自动补全+常用快捷键
- MyBatis+Spring+Spring MVC整合开发
- 解析java序列化机制
- 仲恺acm 1019:石头剪子布【java】
- Java聊天室搭建
- 使用Eclipse基于Maven的Spring MVC 调试心得(一)--- Maven配置
- java 检查a字符串是否包含b字符串
- eclipse 使用Maven deploy命令打包源码到私服nexus
- eclipse-断点调试-设置断点选中行的背景颜色
- Google java style
- Myeclipse中Debug时断点进入另一个相同项目的类中
- JAVA知识问答
- Java中文件的压缩与解压