当前位置: 首页 > article >正文

Java语言程序设计基础篇_编程练习题**18.31 (替换单词)

目录

题目:**18.31 (替换单词)

习题思路

代码示例 

运行结果

替换前

替换后


题目:**18.31 (替换单词)

  编写一个程序,递归地用一个新单词替换某个目录下的所有文件中出现的某个单词。从命令行如下传递参数:

java Exercise18_31 dirName oldWord newWord
  • 习题思路
  1. (读取路径方法)和18.28题差不多,把调用读取文件单词在文件内出现的次数改成调用读取并修改文件方法。Java语言程序设计基础篇_编程练习题*18.28 (非递归目录大小)-CSDN博客
  2. (读取并修改文件方法)传入文件和单词,逐行读取文件,将找到的单词替换为新的字符串,并将每一行(不管是否修改)添加到一个字符串中,在读取结束后向文件内写入字符串。.
  3. (main方法)读取传入的路径和单词,调用读取路径方法。
  • 代码示例 

编程练习题18_31ReplaceWords.java 

package chapter_18;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class 编程练习题18_31ReplaceWords {
	public static void main(String[] args) throws FileNotFoundException,IOException{
		if(args.length != 3) {
			System.out.println("Usage: java 编程练习题18_30WordCount dirName oldWord newWord");
			System.exit(0);
		}
		String path = args[0];
		String oldWord = args[1];
		String newWord = args[2];
		
		File file = new File(path);
		readPath(file, oldWord,newWord);
		System.out.println("Successfully replaced word.");
	}
	public static void readPath(File file,String oldWord,String newWord) throws FileNotFoundException,IOException{
		ArrayList<File> files = new ArrayList<File>();
		files.add(file);
		while(!files.isEmpty()) {
			ArrayList<File> newList = new ArrayList<File>();
			for(File f : files) {
				if(f.isFile())	
					readFile(f, oldWord,newWord);
				else {
					File[] fileList = f.listFiles();
					if(fileList != null) {
						for(File f2:fileList){
							if(f2.isDirectory())
								newList.add(f2);
							else readFile(f2, oldWord,newWord);
						}
					}
				}
			}
			files = newList;
		}
	}
	public static void readFile(File file, String oldWord,String newWord) throws FileNotFoundException,IOException {
		StringBuilder str = new StringBuilder();
		try(Scanner input = new Scanner(file)){
			while(input.hasNextLine()) {
				String line = input.nextLine();
				Pattern pattern = Pattern.compile("\\b" + Pattern.quote(oldWord) + "\\b");
                Matcher matcher = pattern.matcher(line);  
				if(matcher.find()) {
					line = matcher.replaceAll(newWord);
				}
				str.append(line+"\n");
			}
		}
		
		try(FileWriter output = new FileWriter(file)){
			output.write(str.toString());
		}
	}
}
  • 运行结果

  • 替换前

  • 替换后


http://www.kler.cn/a/311642.html

相关文章:

  • 2周足够写完一篇SCI,怎样用chat快速撰写sci
  • Vue功能菜单的异步加载、动态渲染
  • RabbitMQ的应用
  • Python 微服务架构
  • arkUI:Flex弹性布局的各个属性
  • 知识中台赋能法律咨询服务:八大核心优势
  • 网络爬虫requests访问请求过程
  • java识别图片上的文字、java中语言库tessdate的使用
  • Web APIs 第二天
  • 如何应对pcdn技术中遇到的网络安全问题?
  • Docker 进入容器并运行命令的方法
  • iOS17找不到developer mode
  • 从黎巴嫩电子通信设备爆炸看如何防范网络电子袭击
  • Python 爬虫入门 - Request 静态页面数据获取
  • 支持升降压型、升压、降压、60V的1.2MHz频率LED恒流驱动器LGS63040、LGS63042
  • 记录可编辑表格(未完整)
  • 【25.3】C++智能交友系统
  • K8s1.28 部署Dashboard获取登录信息
  • STM32 HAL freertos零基础(八)事件标志组
  • 09 Shell Scriptfor循环结构语句
  • 防爆手机+鸿蒙系统,遨游通讯筑牢工业安全基石
  • Android实现自定义下拉列表绑定数据
  • WEB 编程:使用富文本编辑器 Quill 配合 WebBroker 后端
  • Go语言grequests库并发请求的实战案例
  • vue3常用的组件间通信
  • 『功能项目』眩晕图标显示【52】