震惊 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

目录
相关文章
|
8月前
|
安全 Java PHP
PHP/JAVA交易所系统开发(成熟案例)丨需求步骤丨指南详细丨方案逻辑丨逻辑教程丨源码功能
An exchange refers to an institution or platform that provides a centralized market for buying and selling transactions, where participants can trade various assets, such as securities, commodities, cryptocurrencies, etc. Exchanges provide market infrastructure and rules to facilitate compliant, saf
|
2月前
|
Java API PHP
多多关键字API php java Python
多多关键字API接口广泛应用于商家进行市场分析、竞品分析、关键词优化等场景。商家可以通过分析关键词数据,了解用户需求,制定针对性的营销策略,提高产品的曝光率和转化率。
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
|
5月前
|
存储 Java PHP
Java、PHP、C语言经典项目源码合集推荐(一)
Java、PHP、C语言经典项目源码合集推荐(一)
83 0
|
6月前
|
开发框架 JavaScript Java
推荐一个日历转换开源工具库,支持C#、Java、PHP等主流的语言
推荐一个日历转换开源工具库,支持C#、Java、PHP等主流的语言
47 0
|
7月前
|
消息中间件 Java 物联网
[笔记]阿里云物联网之业务服务端(java、php)接入阿里云平台(二)
[笔记]阿里云物联网之业务服务端(java、php)接入阿里云平台(二)
337 0
|
7月前
|
消息中间件 物联网 Java
[笔记]阿里云物联网之业务服务端(java、php)接入阿里云平台(一)
[笔记]阿里云物联网之业务服务端(java、php)接入阿里云平台
302 1
|
8月前
|
自然语言处理 安全 Java
JAVA丨PHP交易所源码,JAVA/PHP交易所系统开发稳定版/多语言/海外版/多版本/成熟技术/方案详细/逻辑功能/规则案例
Identify requirements and design the system: Clarify your business requirements and design the architecture and functionality of the system. This includes determining the supported transaction types, user authentication, transaction matching engines, order management, fund management, etc.
|
10月前
|
Java 测试技术 API
工银e生活开发脱坑日志(9)JAVA版的SDK自动生成msgId,PHP如何生成消息通讯唯一编号msgId
工银e生活开发脱坑日志(9)JAVA版的SDK自动生成msgId,PHP如何生成消息通讯唯一编号msgId
109 0