TextReplacer文本替换:目录的层次显示

有时候网上复制下来的书的目录是没有层次结构的,打印出来之后比较难看:

 

 写道
2.1 窗口简介 10
2.2 窗口的创建和撤销 10
2.2.1 创建普通窗口(CreateWindow、CreateWindowEx) 10
2.2.2 关闭窗口(CloseWindow) 19
2.2.3 销毁窗口(DestroyWindow) 20
2.3 窗口类操作 21
2.3.1 注册窗口类(RegisterClass、RegisterClassEx) 21
2.3.2 撤销窗口类(UnregisterClass) 23
2.3.3 获得窗口类信息(GetClassInfoEx) 24
 

所以想利用replace的方法处理一下,即符合某个正则表达式的字符串前加几个tab即可,但是发现文本编辑器的replace只能直接replace一个固定的字符串,所以只好自己写了一个这样的TextReplacer:

 

	public void replace() throws IOException
	{	
		File text=new File(textUrl);
		BufferedReader in=new BufferedReader(new FileReader(text));
		String eachLine;
		eachLine=in.readLine();
		while(eachLine!=null)
		{
			//为了方便使用,直接输出到console,这样直接拷贝结果覆盖原来的文本
			System.out.println(lineReplacer(eachLine));
			eachLine=in.readLine();
		}
	}

	private String lineReplacer(String eachLine)
	{
		// TODO Auto-generated method stub
		Matcher matcher=Pattern.compile(regex).matcher(eachLine);
		String result=new String();
		String matchedStr=null;
		int scanIndex=0;//eachLine 扫描位置
		while(matcher.find())
		{
			matchedStr=matcher.group();
			result+=eachLine.substring(scanIndex,eachLine.indexOf(matchedStr,scanIndex));
			scanIndex=eachLine.indexOf(matchedStr)+matchedStr.length();
			//$字符在正则表达式中有特殊意义,所以要使用转义字符“\\”
			result+=replacement.replaceAll("\\$", matchedStr);
		}
		result+=eachLine.substring(scanIndex);
		return result;
		
	}

使用时:

 

		Replacer replacer=new Replacer("C:\\Documents and Settings\\wesley\\桌面\\text.txt");
		try
		{
			//符号$代表text中符合regex模式的字符串$
			replacer.setReplacement("	$");
			replacer.setRegex("\\d+.\\d+.\\d+");
			replacer.replace();
		} catch (IOException e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

 即可完成替换。当然可以再封装出一个专门用来这种层次结构排班的类,但是这个基本已经够用了。

结果:

2.1 窗口简介 10
2.2 窗口的创建和撤销 10
	2.2.1 创建普通窗口(CreateWindow、CreateWindowEx) 10
	2.2.2 关闭窗口(CloseWindow) 19
	2.2.3 销毁窗口(DestroyWindow) 20
2.3 窗口类操作 21
	2.3.1 注册窗口类(RegisterClass、RegisterClassEx) 21
	2.3.2 撤销窗口类(UnregisterClass) 23
	2.3.3 获得窗口类信息(GetClassInfoEx) 24
 

你可能感兴趣的:(TextReplacer文本替换:目录的层次显示)