package com.gzz.server;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import lombok.extern.slf4j.Slf4j;
/**
* @summary 驼峰与下划线转换工具
* @author 高振中
* @date 2023-01-01 12:00:00
**/
@Slf4j
public class TextTools {
public static void main(String[] args) {
String str = "create_time_date_hello_world";
log.info(TextTools.toLowerCamel(str));
log.info(TextTools.toUpperCamel(str));
str = "CreateTimeDateHelloWorld";
log.info(TextTools.toLine(str));
str = "createTimeDateHelloWorld";
log.info(TextTools.toLine(str));
log.info(System.getProperty("os.name"));
}
private static final String LINE = "_";
/**
* 驼峰-->下划线
*/
public static String toLine(String word) {
StringBuilder sb = new StringBuilder();
char[] chars = word.toCharArray();
sb.append(Character.toLowerCase(chars[0]));// 第1个字符转小写
for (int i = 1; i < chars.length; i++)// 从第2字符开始:遇到大写 前面加_字符转成小写 否则直接拼上
sb.append(Character.isUpperCase(chars[i]) ? LINE + Character.toLowerCase(chars[i]) : chars[i]);
return sb.toString();
}
/**
* 下划线-->首字母大写驼峰
*/
public static String toUpperCamel(String word) {
char[] chars = toLowerCamel(word).toCharArray();
chars[0] -= 32;
return new String(chars);
}
/**
* 下划线-->首字母小写驼峰
*/
public static String toLowerCamel(String word) {
StringBuilder sb = new StringBuilder(word);
Matcher mc = Pattern.compile(LINE).matcher(word);
for (int i = 0; mc.find(); i++) // 每次替换_x为X,同时因为长度减少1偏移量调整1
sb.replace(mc.end() - i - 1, mc.end() - i + 1, sb.substring(mc.end() - i, mc.end() - i + 1).toUpperCase());
return sb.toString();
}
}
网友评论