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
 
很高兴回答您的问题。为了实现您的需求,您可以采用以下步骤: 1. 使用Java Swing库创建一个窗口界面,包括标签、文本框、按钮等控件。 2. 在窗口界面中加入一个文本区域,用于输入要替换文本。 3. 在窗口界面中加入一个查找按钮和一个替换按钮,用于触发相应的操作。 4. 在查找按钮的事件处理程序中,使用Java字符串处理方法查找文本区域中是否存在要查找的文本。 5. 如果存在要查找的文本,则可以将其选中并高亮显示,以便用户知道哪些文本将被替换。 6. 在替换按钮的事件处理程序中,使用Java字符串处理方法将选中的文本替换为要替换文本。 7. 最后,刷新文本区域以更新显示效果。 下面是一个简单的Java代码示例,可以帮助您实现上述功能: ```java import javax.swing.*; import java.awt.*; import java.awt.event.*; public class TextReplacer extends JFrame implements ActionListener { private JTextArea textArea; private JTextField findTextField; private JTextField replaceTextField; private JButton findButton; private JButton replaceButton; public TextReplacer() { super("Text Replacer"); // Create components textArea = new JTextArea(); findTextField = new JTextField(); replaceTextField = new JTextField(); findButton = new JButton("Find"); replaceButton = new JButton("Replace"); // Add components to window JPanel panel = new JPanel(new BorderLayout()); panel.add(new JLabel("Find: "), BorderLayout.WEST); panel.add(findTextField, BorderLayout.CENTER); panel.add(findButton, BorderLayout.EAST); add(panel, BorderLayout.NORTH); panel = new JPanel(new BorderLayout()); panel.add(new JLabel("Replace with: "), BorderLayout.WEST); panel.add(replaceTextField, BorderLayout.CENTER); panel.add(replaceButton, BorderLayout.EAST); add(panel, BorderLayout.SOUTH); JScrollPane scrollPane = new JScrollPane(textArea); add(scrollPane, BorderLayout.CENTER); // Set up event listeners findButton.addActionListener(this); replaceButton.addActionListener(this); // Set window properties setSize(500, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource() == findButton) { String text = textArea.getText(); String find = findTextField.getText(); int index = text.indexOf(find); if (index >= 0) { textArea.setCaretPosition(index); textArea.select(index, index + find.length()); } } else if (e.getSource() == replaceButton) { String text = textArea.getText(); String find = findTextField.getText(); String replace = replaceTextField.getText(); text = text.replace(find, replace); textArea.setText(text); } } public static void main(String[] args) { new TextReplacer(); } } ``` 希望这个示例可以帮助您实现您的Java应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值