博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
处理一个字符串多个分隔符
阅读量:4294 次
发布时间:2019-05-27

本文共 2290 字,大约阅读时间需要 7 分钟。

在之前的项目需求中,遇到一个字符串一种字符标识为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
> byteOpare(char[] src, char[] symbol) { Map
> result = new HashMap
>(); 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
> result, String key, String value) { if(StringUtil.isNullOrEmpty(key)) { key = "empty"; } if (result.containsKey(key)) { ((List
) result.get(key)).add(value); } else { List
values = new ArrayList
(); 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
> result = new Demo().byteOpare( str.toCharArray(), new char[] { '#', '$', '|', 'N' }); for (Entry
> 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下

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

你可能感兴趣的文章
为内网的杨舍cloudera设置nginx反向代理端口不同
查看>>
关于线程池任务报错的处理与理解
查看>>
一次数据库与es程序优化的过程
查看>>
MySQL 修改表结构相关
查看>>
三目运算法中隐藏的问题
查看>>
JVM GC问题排查(多数是内存泄漏导致)
查看>>
JVM理论
查看>>
JVM内存模型简述
查看>>
从一个Java对象看JVM内存模型及对象生命周期
查看>>
为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?
查看>>
JDK常用监控指令和监控工具分析及OutOfMemory异常分析
查看>>
使用线程池注意事项
查看>>
java线程池理论知识拾遗
查看>>
原码反码补码,位运算,或与非
查看>>
IntelliJ IDEA普通项目添加pom.xml,转变为Maven项目
查看>>
ThreadPoolExecutor部分方法解读
查看>>
Java8 新特性 lambda表达式
查看>>
ArrayList与LinkedList的性能差别
查看>>
Tomcat类加载机制
查看>>
for(;;) and while(true)
查看>>