代码经验

1. 数字转中文

网上抄的

package com.bdip.common.utils;
/**
* @author gx
* @date 20240327
* 数字工具类
* */
public class NumberUtil {
/**
* 转换阿拉伯数字到中文字符
* @param num
* @return
*/
public static String cnNumConvertor(int num) {
if (num==0) {
return "零";
}
final String illegalPrefix = "一十";
final String[] units = {"", "万", "亿", "兆"};
String prefix = "";
if (num < 0) {
prefix = "负";
num = -num;
}
String numStr = String.valueOf(num);
final int metaLen = 4;
int r = numStr.length() - 1;
int l = Math.max(0, r - metaLen + 1);
int unitIndex = 0;
StringBuilder builder = new StringBuilder();
while (r >= 0 && l >= 0) {
builder.insert(0, cnNumMetaConvertor(numStr.substring(l, r + 1)) + units[unitIndex++]);
r = l - 1;
l = Math.max(0, r - metaLen + 1);
}
String res = builder.toString();
if (res.startsWith(illegalPrefix)) {
res = res.substring(1, res.length());
}
return prefix + res;
}
/**
* 按照中文阅读习惯,处理最高4位的 meta 数字集
*
* @param num
* @return
*/
private static String cnNumMetaConvertor(String num) {
final int metaLen = 4;
final String zeroStr = "0";
final String[] cnNums = {"零", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
final String[] units = {"千", "百", "十", ""};
StringBuilder builder = new StringBuilder();
int N = num.length();
boolean canNotJudge = N > metaLen || (N < metaLen && num.startsWith(zeroStr));
if (canNotJudge) {
return "";
}
boolean isPreZero = false;
int unitIndex = metaLen - num.length() - 1;
for (int i = 0; i < N; i++) {
++unitIndex;
final int currNum = num.charAt(i) - '0';
final String currNumCn = cnNums[currNum];
final String currUnit = units[unitIndex];
if (currNum == 0) {
if (isPreZero) {
continue;
}
isPreZero = true;
builder.append(currNumCn);
} else {
isPreZero = false;
builder.append(currNumCn);
builder.append(currUnit);
}
}
String res = builder.toString();
return res.endsWith("零") ? res.substring(0, res.length() - 1) : res;
}
}

2. 中文排序

public void test(){
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
list.add("马路i");
list.sort(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
Collator instance = Collator.getInstance(Locale.CHINA);
return instance.getCollationKey(o1).compareTo(instance.getCollationKey(o2));
}
});
}

如果遇到生僻字会有 bug,需要通过转成拼音再排序。

3. HTML 反转义

import org.apache.commons.lang.StringEscapeUtils;
public class Test{
public static void main(String args[]){
StringEscapeUtils.unescapeHtml("&nbsp;我是一个测试");
}
}

本文作者:primaryC

本文链接:https://www.cnblogs.com/cnff/p/18138173

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   primaryC  阅读(12)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.