首页 > 编程语言 >java过滤器实现全局的简繁体转化

java过滤器实现全局的简繁体转化

时间:2025-01-21 17:29:23浏览次数:3  
标签:java String matcher return 简繁体 import 过滤器 input public

背景 : 因为是国外项目,有些国家和地区希望默认给繁体,也希望谷歌抓包抓源代码中是繁体推广

首先使用到的是opencc库,值得一提的是前端也有,这样就不会有库对库的冲突了

maven仓库

        <dependency>
            <groupId>com.github.houbb</groupId>
            <artifactId>opencc4j</artifactId>
            <version>1.1.0</version>
        </dependency>

前端的看源码仓库

直接上工具类

public class ChineseConverterUtil {

    // 将繁体中文转换为简体中文
    public static String fToJ(String input) {
        if (StringUtils.isEmpty(input) || !isTraditionalChinese(input)) {
            return input;
        }
        return ZhConverterUtil.convertToSimple(input);
    }

    // 将字符串中的简体中文替换为繁体中文
    public static String jToF(String input) {
        if (StringUtils.isEmpty(input)) {
            return input;
        }
        // 正则表达式匹配简体中文字符
        Pattern pattern = Pattern.compile("[\u4e00-\u9fa5]+");
        Matcher matcher = pattern.matcher(input);
        StringBuffer result = new StringBuffer();

        while (matcher.find()) {
            String simplified = matcher.group();
            String traditional = ZhConverterUtil.convertToTraditional(simplified);
            matcher.appendReplacement(result, traditional);
        }
        matcher.appendTail(result);
        return result.toString();
    }


    // 检查输入文本是否为繁体中文
    public static boolean isTraditionalChinese(String text) {
        for (char c : text.toCharArray()) {
            if (Character.UnicodeBlock.of(c) == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS) {
                // 进一步检查字符是否为繁体字,可以根据实际需求进行扩展
                return true;
            }
        }
        return false;
    }
}

然后这样会把简体都替换成繁体字

当然,需要一个过滤器去调用它

package com.ka.service.filter;


import com.ka.common.core.utils.ChineseConverterUtil;
import com.ka.service.wrapper.ResponseWrapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.FilterConfig;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Component
public class AnonymityFilter implements Filter {

    private static Logger logger = LoggerFactory.getLogger(AnonymityFilter.class);


    @Override
    public void init(FilterConfig filterConfig) {
		//初始化操作
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
		//转换为代理类
        ResponseWrapper responseWrapper = new ResponseWrapper((HttpServletResponse) servletResponse);
        filterChain.doFilter(servletRequest, responseWrapper);
        byte[] content = responseWrapper.getContent();

        if (content.length > 0) {
            String str = new String(content, "UTF-8");
            String ciphertext = null;
            try {
                //在此可以根据需要处理接口返回的信息
                ciphertext = ChineseConverterUtil.jToF(str);
            }
            catch (Exception e)
            {
                //异常最好不要使用e.printStackTrace() 被吃掉
                e.printStackTrace();
            }
            //把返回值输出到客户端
            ServletOutputStream out = servletResponse.getOutputStream();
            out.write(ciphertext.getBytes());
            out.flush();
        }
		//由于我是需要对返回的信息进行处理,所以先进行放行操作。
		//若是需要在请求前进行相关操作,则需要在此请求前处理
		//获取返回值信息
    }
    
    @Override
    public void destroy() {
    //销毁时使用
    }
}

以上都是干货

标签:java,String,matcher,return,简繁体,import,过滤器,input,public
From: https://blog.csdn.net/weixin_63588620/article/details/145286015

相关文章

  • java业务逻辑判断
       在平时的业务开发中,空指针出现的频率是比较高的bug,在出现空指针的时候,很多小伙伴都是习惯性地加!=null的判断,这个bug就能解决。当代码中频繁出现!=null的判断时,我们就会很头疼,能不能高效、优雅地做这个判断?答案当然是可以的。1.在做!=null的判断时,请停顿一下,......
  • 【转】[JavaScript] textContent 用法
    转自:kimi.ai在JavaScript中,textContent是一个用于操作DOM元素文本内容的属性。它允许你获取或设置指定元素及其子元素的文本内容。以下是关于textContent的详细用法和特点:1.获取文本内容textContent可以获取指定元素及其所有子元素的文本内容,忽略HTML标签。例如:HTM......
  • 【转】[JavaScript] try...catch 语法
    转自:kimi.ai在JavaScript中,try...catch是一种用于捕获同步错误的语法结构。它允许你尝试执行一段代码,并在代码运行过程中捕获可能出现的异常(错误),从而避免程序因为未处理的错误而崩溃。通过try...catch,你可以对错误进行处理,例如记录错误信息、提供默认值或执行替代逻辑。基本......
  • Java多线程循环list集合
    1.Java多线程基本概念在开始之前,先简单了解一下Java的多线程。如果一个应用程序在执行多个任务时,每个任务都是独立的,那么我们就可以把这些任务放在多个线程中并发执行。Java通过Thread类和Runnable接口提供了创建和管理线程的技术。1.1创建线程创建线程最常见的方法有两......
  • 基于Java的学生选课系统设计与实现 毕业设计源码13931
    摘要在当今快节奏的高等教育环境中,学生选课系统的重要性愈发凸显。曾经,学生在选课时需要排长队、填表格,繁琐而低效。为解决这一难题,本研究设计并实现了一套智能化学生选课系统。这一系统不仅为学生提供了便捷的选课服务,也为教务管理带来了新的机遇。通过系统的开发,我旨在提......
  • 请解释下href="javascript:void(0)"和href="#"的区别是什么?
    在前端开发中,href="javascript:void(0)"和href="#"都是常见的用于阻止链接默认行为的技巧,但它们之间有一些重要的区别。功能:href="javascript:void(0)":这个语句会执行JavaScript函数void(0),该函数返回undefined,从而阻止链接的默认行为(即跳转到新页面或重新加载当前......
  • 「youlai-boot」入门篇:从0到1搭建 Java、Spring Boot、Spring Security 企业级权限管
    ......
  • 招高级Java一枚(广州)英语口语好可以是中级
    岗位职责  1、参与自研SAAS平台项目的设计与开发工作,包括数据库设计、编码和单元测试等工作2、独立完成某一业务模块整体方案,包括:计划、流程、业务影响范围、相关技术选择,保证所负责系统的安全性、稳定性及可扩展性3、深入了解业务知识,并能敏锐发现业务痛点4、有中大......
  • 05JavaWeb——SpringBootWeb请求响应
    前言在上一次的课程中,我们开发了springbootweb的入门程序。基于SpringBoot的方式开发一个web应用,浏览器发起请求/hello后,给浏览器返回字符串“HelloWorld~”。其实呢,是我们在浏览器发起请求,请求了我们的后端web服务器(也就是内置的Tomcat)。而我们在开发web程序时呢,......
  • JavaFX + Maven实战:可内网联机的多人在线五子棋游戏开发全解析(附Socket通信与EXE打包)
    目录1.项目背景与需求分析1.1为何选择内网联机五子棋?1.2内网联机方案的附加价值2.技术选型与开发环境2.1GUI框架选型:JavaFXvsSwing深度对比2.1.1渲染性能与现代化特性2.1.2渲染性能与现代化特性2.2构建工具:Maven3.8.8核心优势2.2.1依赖管理自动化2.2.2EXE......