有时候网上复制下来的书的目录是没有层次结构的,打印出来之后比较难看:
所以想利用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