处理一个字符串多个分隔符

2024-06-04 12:58

本文主要是介绍处理一个字符串多个分隔符,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在之前的项目需求中,遇到一个字符串一种字符标识为1种类型。

         如字符串: a#aa|b#bb$c#aaa。。。这种

其中

#号一组的有:[a,aa,bb,aaa]

分组为$有:[c]

分组|的有:[b]

.......

里面规则是:第一个符号前面没有标识符则列入后面的分组,后面字符串没有标识符则列入前面标识分组,其余中间部分按前面标识符分组

如(前无):a 前面没有标识符,则取后面#号

如2(后无):aaa后面没有标识符,则取前面

如3(中间):aa前面#号,则是#号分组,b前面是|,这是|号分组

以此类推。。。。


代码如下:



/**** @param src 操作的符号* @param symbol 操作的符号* */public static Map<String, List<String>> byteOpare(char[] src, char[] symbol) {Map<String, List<String>> result = new HashMap<String, List<String>>();int size = src.length;String prefix = null, suffix = null;String buf = "";for (int i = 0; i < size; i++) {// 第一个字符和最后的字符特殊处理char b = src[i];if (i == 0) {if (compareSymbol(b, symbol)) { // 特殊字符prefix = b + "";} else { // 普通字符prefix = null;buf += b;}} else if (i == size - 1) { // 最后一个特殊处理if (!compareSymbol(b, symbol)) { // 特殊字符buf += b;}put(result, prefix, buf);} else { // 中间数据if (compareSymbol(b, symbol)) { // 特殊字符suffix = b + "";if (prefix == null) { // 没有前缀// 数字按后缀处理// 并且按后缀保存put(result, suffix, buf);} else {// 有前缀按前缀的来处理put(result, prefix, buf);}prefix = suffix; // 处理完后将后缀变成前缀suffix = null;buf = "";} else {buf += b;}}}return result;}/*** 添加至Map* @param result* @param key* @param value*/public static void put(Map<String, List<String>> result, String key, String value) {if(StringUtil.isNullOrEmpty(key)) {key = "empty";}if (result.containsKey(key)) {((List<String>) result.get(key)).add(value);} else {List<String> values = new ArrayList<String>();values.add(value);result.put(key, values);}}/*** 是否包含特殊字符* */public static boolean compareSymbol(char target, char[] symbol) {for (char s : symbol) {if (s == target) {return true;}}return false;}


则以下为测试方法:

String str = "a#aa|b#bb$c#aaa";Map<String, List<String>> result = new Demo().byteOpare(str.toCharArray(), new char[] { '#', '$', '|', 'N' });for (Entry<String, List<String>> entry : result.entrySet()) {String key = entry.getKey();System.out.print("分组为" + key + "[");for (String value : entry.getValue()) {System.out.print(value + ",");}System.out.println("]");}


打印结果为:

分组为#[a,aa,bb,aaa,]
分组为$[c,]
分组为|[b,]


值得注意的是,如果没有任意标识符的话,Map中的Key为:empty



希望有用上的码友。Mark下

害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞害羞


这篇关于处理一个字符串多个分隔符的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1030152

相关文章

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

Spring Boot 中的默认异常处理机制及执行流程

《SpringBoot中的默认异常处理机制及执行流程》SpringBoot内置BasicErrorController,自动处理异常并生成HTML/JSON响应,支持自定义错误路径、配置及扩展,如... 目录Spring Boot 异常处理机制详解默认错误页面功能自动异常转换机制错误属性配置选项默认错误处理

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口