java 正则(2) 空行匹配

java 正则 空白行

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 的结果相同


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值