【Java】工具类,如何将匈牙利命名法转换成驼峰命名法
程序员文章站
2022-07-15 09:43:30
...
一、概念介绍
1.1、匈牙利命名法:user_id,字母均小写,不同单词间用下划线分割;
1.2、驼峰命名法:userId,除了第一个单词的首字母小写,其余单词的首字母均大写,单词之间没有符号,仅仅通过单词首字母的大小写区分;
1.3、帕斯卡命名法:UserId,所有单词的首字母均大写;
二、问题
如何将匈牙利命名法转换成驼峰命名法?
三、思路
这里有好几种方法,这里介绍一种:
1.首先我们要获取匈牙利命名法的 字符串的下划线下标的位置,例如user_old_pwd,下划线的下标为:4和8;
2、将下划线下标后面的字母大写;
3、替换掉下划线;
四、代码分析
首先,我们将字符串穿放到数组中,然后便利数据,将下划线的下标记录,求出下划线后面一位的地址,然后,将下划线后一位替换为大写,最后替换掉
4.1、替换指定位置字符为大写方法
/**
* 转换制定下标的String字符串的大小写
* @param s 字符串
* @param location 下标位置,第一个字符为下标为0;
* @return String 返回替换大小写后的String字符串
*/
public static String changeCase(String s,int location){
byte [] bytes = s.getBytes();
for(int i=0;i<bytes.length;i++) {
if (bytes[i]>64&&bytes[i]<91&&i==location){
bytes[i] = (byte)(bytes[i]+32);
}else if(bytes[i]>96&&bytes[i]<123&&i==location) {
bytes[i] = (byte)(bytes[i]-32);
}
}
return s;
}
4.2、获取下标后的位置
/**
* 将匈牙利命名法转换为驼峰命名法
* 例如user_id ----->userId
*/
public static String turnHungary2CamelCase(String s) {
int j = 0;
s = s.toLowerCase();
for (int i = 0; i < s.lastIndexOf("_"); i++) {
i = s.indexOf("_", i);
j = i + 1;
s = changeCase(s, j);
}
s = s.replace("_", "");
return s;
}
4.3、完整的测试类如下:
/**
* Created by Taozhouchuan on 18-7-16.
*/
public class TestTurnHungary2Camel {
public static void main(String[] args) {
String s = "bser_name";
s = turnHungary2CamelCase(s);
System.out.println(s);
}
/**
* 将匈牙利命名法转换为驼峰命名法
* 例如user_id ----->userId
*/
public static String turnHungary2CamelCase(String s) {
int j = 0;
s = s.toLowerCase();
for (int i = 0; i < s.lastIndexOf("_"); i++) {
i = s.indexOf("_", i);
j = i + 1;
s = changeCase(s, j);
}
s = s.replace("_", "");
return s;
}
/**
* 转换制定下标的String字符串的大小写
* @param s 字符串
* @param location 下标位置,第一个字符为下标为0;
* @return String 返回替换大小写后的String字符串
*/
public static String changeCase(String s, int location) {
byte[] bytes = s.getBytes();
for (int i = 0; i < bytes.length; i++) {
if (bytes[i] > 64 && bytes[i] < 91 && i == location) {
bytes[i] = (byte) (bytes[i] + 32);
} else if (bytes[i] > 96 && bytes[i] < 123 && i == location) {
bytes[i] = (byte) (bytes[i] - 32);
}
}
return s;
}
}
开源不易,欢迎扫码支持,扫码领红包!