震惊 PHP4 里的 preg_replace_callback Java9 才跟上,PHP亲密度 +1

简介: 前几日因为日志输出量大,但是很多时候又还想用日志来做兜底逻辑的查询,所以想增加一个异步事件监听去做字符串截取。想起了 preg_replace_callback

前几日因为日志输出量大,但是很多时候又还想用日志来做兜底逻辑的查询,所以想增加一个异步事件监听去做字符串截取,比如有这样一个字符串

{
    "a": 123456,
    "b": "abcdefgabcdefgabcdefgabcdefgabcdefgabcdefg",
    "c": "abcdefgabcdefgabcdefgabcdefgabcdefgabcdefg",
    "message": "OK",
    "requestId": "0b89205b16508538498111994d2783",
    "success": true
}

目标值

{
    "a": 123456,
    "b": "abcdefgabcdefgabcdefgabcdefgabcde...",
    "c": "abcdefgabcdefgabcdefgabcdefgabcde...",
    "message": "OK",
    "requestId": "0b89205b16508538498111994d2783",
    "success": true
}

如果用正则简单处理的情况下,先匹配到所有的值中过长且为字符串的,大概就是这样一个正则:\"([^\"]+)\",(不够严谨)

这时候我就想到了 preg_replace_callback,但是在 java 里怎么都没找到,然后 stackoverflow 给了我答案

https://stackoverflow.com/questions/375420/java-equivalent-to-phps-preg-replace-callback

java8 也不是不能写出来,只是要自己写一段循环处理,重点是Matcher.appendReplacement

String jsonString = "{\"a\":123456,\"b\":\"abcdefgabcdefgabcdefgabcdefgabcdefgabcdefg\",\"c\":\"abcdefgabcdefgabcdefgabcdefgabcdefgabcdefg\",\"message\":\"OK\",\"requestId\":\"0b89205b16508538498111994d2783\",\"success\":true}";

StringBuffer resultString = new StringBuffer();
Pattern regex = Pattern.compile(":\"([^\"]+)\",");
Matcher regexMatcher = regex.matcher(jsonString);
while (regexMatcher.find()) {
    String matchString = regexMatcher.group(0);
    if (matchString.length() > 36) {
        matchString = matchString.substring(0,35) + "...\",";
    }
    regexMatcher.appendReplacement(resultString, matchString);
}
regexMatcher.appendTail(resultString);

System.out.println(resultString);

相比之下,PHP 就更为亲切,早在 PHP4 的时代就为开发者做了封装,所以如果你是一个小作坊呢,PHP 很多时候还是挺香的!
https://www.php.net/manual/zh/function.preg-replace-callback.php

发现 Java9 也补上了这个功能
https://docs.oracle.com/javase/10/docs/api/java/util/regex/Matcher.html#replaceAll(java.util.function.Function)

image.png

目录
相关文章
|
1月前
|
JSON 前端开发 Java
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
文章介绍了Java后端如何使用Spring Boot框架响应不同格式的数据给前端,包括返回静态页面、数据、HTML代码片段、JSON对象、设置状态码和响应的Header。
134 1
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
|
6月前
|
安全 Java 编译器
深入理解PHP 8.0新特性及其对开发的影响Java中的多线程编程:从理论到实践
【5月更文挑战第27天】在这篇文章中,我们将详细探讨PHP 8.0的新特性以及它们如何影响开发者的工作流程。我们将深入研究这些新特性,包括JIT编译器,联合类型,命名参数,以及更多的错误处理机制。我们还将讨论这些新特性如何提高代码的可读性和性能,以及它们如何改变我们编写和维护PHP应用程序的方式。 【5月更文挑战第27天】在现代计算机科学中,多线程编程是一个重要的概念,它允许多个线程在同一时间内运行,从而提高了程序的效率和性能。本文将深入探讨Java中的多线程编程,包括其理论基础,实现方法,以及一些常见的问题和解决方案。我们将通过实例来理解如何创建和管理线程,以及如何使用Java的并发工具来
ly~
|
2月前
|
安全 Java 大数据
php跟java有什么区别
PHP 和 Java 是两种常用编程语言,各有特色。PHP 语法简洁灵活,适用于快速开发中小型网站,尤其在 Web 脚本和数据库交互中表现出色。Java 则语法严谨,强类型特性使其在企业级应用、移动开发及大数据处理中更受欢迎,具备高稳定性和安全性。通过优化,PHP 性能可提升,而 Java 在大规模应用中表现更佳。总体而言,PHP 开发效率高但维护性稍差,Java 则更注重代码质量和安全性。
ly~
51 5
|
3月前
|
Java 数据库
震惊!Guava Throwables 类如魔法棒般神奇,让 Java 异常处理华丽变身!
【8月更文挑战第29天】在 Java 开发中,异常处理至关重要,而 Guava 库中的 `Throwables` 类则提供了强大的异常处理工具。它包含了一系列静态方法,如 `propagateIfInstanceOf` 和 `propagateIfPossible`,可以帮助我们有条件地传播异常。此外,`getRootCause` 方法可以深入分析异常的根本原因,有助于快速定位问题所在。无论是构建大型分布式系统还是电商平台,`Throwables` 类都能显著提升异常处理的效率和准确性,使我们的程序更加稳定和可靠。
40 1
|
3月前
|
Java 应用服务中间件 PHP
PHP——调用java文件中的方法
PHP——调用java文件中的方法
56 0
PHP——调用java文件中的方法
|
3月前
|
Java PHP 开发者
PHP中的异常处理:Java常见的编码方式
在PHP开发中,掌握异常处理至关重要,它有助于预见并管理运行时错误,避免用户体验受损或数据丢失。本文介绍PHP异常处理的基本概念与实践,包括try-catch语句的使用,以及如何通过抛出和捕获异常来增强代码的健壮性和可靠性。通过示例展示如何避免常见错误,如除数为零的情况,并探讨多catch块和finally语句的高级用法,帮助开发者提升程序稳定性与可维护性。[总字符数:238]
29 0
|
5月前
|
Java PHP 数据安全/隐私保护
php和Java配合 aes
php和Java配合 aes加密
43 1
|
5月前
|
Java 开发者
震惊!Java命名规范背后的惊天秘密,你真的了解吗?
【6月更文挑战第15天】Java命名规范提升代码可读性。标识符须以字母、下划线或$开头,避免数字开头。变量用camelCase,如`myVariable`;类与方法用PascalCase,如`MyClass`和`myMethod`。常量全大写加下划线,如`MAX_VALUE`。避免关键字冲突,确保可维护性。
45 10
|
5月前
|
Java
震惊!Java子类竟能“继承”父类财富,还能“自立门户”添新招!
【6月更文挑战第16天】Java的继承支持类的层次结构,子类(如`SportsCar`)继承父类(如`Car`)的属性和方法。`SportsCar`不仅拥有`Car`的基本功能,还能添加独特属性(如最高时速、加速时间)和方法(如氮气加速),并能重写父类方法以扩展功能。此机制促进代码复用,提高效率。例如,`SportsCar`调用`super.accelerate()`执行基本加速,并添加跑车特有的加速效果。
42 8
|
5月前
|
Java 开发者
震惊!Java多线程的惊天秘密:你真的会创建线程吗?
【6月更文挑战第19天】Java多线程创建有两种主要方式:继承Thread类和实现Runnable接口。继承Thread限制了多重继承,适合简单场景;实现Runnable接口更灵活,可与其它继承结合,是更常见选择。了解其差异对于高效、健壮的多线程编程至关重要。
35 2