根据正则表达式,过滤项目中中文代码,去除注释和@注解

package com.*.util;

import cn.hutool.core.collection.CollectionUtil;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

/**
 * 代码检索工具类
 * @author super
 */
@Slf4j
public class SourceCodeSearchUtils {

    /**
     * 正则查找中文,是否包含中文 true 包含,false 不包含
     * @param str
     * @return
     */
    public static boolean isContainChinese(String str) {
        String chinese = "[\u4e00-\u9fa5]";
        Pattern p = Pattern.compile(chinese);
        Matcher m = p.matcher(str);
        if (m.find()) {
            return true;
        }
        return false;
    }

    public static void main(String[] args) {

        // 假设你想读取的项目路径是 "controller",位于项目根目录下
        String projectPath = "/Users/admin/Desktop/work/代码/项目代码/bff-admin/src/main/java/*/controller";

        // 使用Paths和Files来获取项目路径下的所有文件和文件夹
        try {
            List<String> allFiles = Files.walk(Paths.get(projectPath))
                    .filter(Files::isRegularFile)
                    .map(Path::toString)
                    .collect(Collectors.toList());
            Set<String> set = new HashSet<>();
            // 打印所有文件的路径
            for (String file : allFiles) {
                List<String> contentList = readAllLines(file);
                if (CollectionUtil.isNotEmpty(contentList)){
                    for (String content : contentList) {
                        if (isContainChinese(content)){
                            if (isSpecialSymbol(content)){
                                log.info("invoke 注释 文件内容:{}",content);
                                log.info("Invoke 注释 文件路径:{}",file);
                            }else {
                                set.add(file);
                            }
                        }
                    }
                }
            }
            // 所有的包含中文的文件名称
            for (String s : set) {
                log.info("invoke 文件路径:{}",s);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 是否包含特殊符号 true 有,false 无
     * @param str
     * @return
     */
    public static boolean isSpecialSymbol(String str) {
        String regex = "[!@#\\$%\\^&*/|]";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(str);
        if (m.find()) {
            return true;
        }
        return false;
    }

    /**
     * 根据文件路径读取文件内容,返回每行内容
     * @param filePath
     * @return
     */
    public static List<String> readAllLines(String filePath) {
        Path path = Paths.get(filePath);
        try {
            return Files.readAllLines(path);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

}

你可能感兴趣的:(正则表达式,正则表达式,java,intellij-idea)