鱼友6658
2022-05-27
#Java# 之前向鱼皮请教了一个字符串的自定义排序问题,简单来说就是分页查询时能够按照某个字段实现类似 ["1A-2B", "2A-2B", .... , "11A-2B"]的排序效果(如果使用mysql或者java的默认排序,会变成"1A-2B", "11A-2B", "2A-2B"这样,这是逐字符排序导致的) 根据鱼皮的建议,考虑到实际的业务需求,字符串中出现的数字一般不会很多位,且该字段不会特别长,于是采用了一下解决方案:将65535(char的最大值)以内的连续数字转为对应的char字符替换原来的连续数字,新增时作为排序字段保存到数据库,获取列表时直接根据该排序字段排序即可,解决了先分页查询后排序的数据误差问题,实测可用。 代码如下,虽然应该没什么人用得上 public String convert(String fileName) { char[] cs = fileName.toCharArray(); StringBuilder builder = new StringBuilder(); for (int i = 0; i < cs.length;) { if (cs[i] < '0' || cs[i] > '9') { builder.append(cs[i ]); } else { StringBuilder numBuilder = new StringBuilder(); while (i < cs.length && cs[i] >= '0' && cs[i] <= '9') { numBuilder.append(cs[i ]); } // 如果超出5位数或者超过65535(char最大值)则当做多个字符处理,否则转为数字对应的字符拼接 if (numBuilder.length() > 5) { builder.append(numBuilder); continue; } int num = Integer.parseInt(numBuilder.toString()); if (num > 65535) { builder.append(numBuilder); } else { builder.append((char) num); } } } return builder.toString(); }
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP