怎么用java实现驼峰命名法与数据库命名法的相互转换
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用java实现驼峰命名法与数据库命名法的相互转换相关的知识,希望对你有一定的参考价值。
手敲的,给个辛苦分吧。。。package test;
import java.util.ArrayList;
import java.util.List;
public class Test
public static void main(String[] args)
//testing for data base column-key to java field
String[] dbKeys = "id", "user_age", "user_addr_";
Test t = new Test();
t.convertToJava(dbKeys);
System.out.println("-----------------------------------");
//testing for Java field to data base column-key
String javaFieldNames[] = "id","userAge","userHomeAddr";
t.getDBKey(javaFieldNames);
/*
* Java field to data base column-key
*/
private void getDBKey(String... javaFieldNames)
if(javaFieldNames != null && javaFieldNames.length > 0)
for(String name : javaFieldNames)
StringBuffer buffer = new StringBuffer();
char[] array = name.toCharArray();
List<Integer> insertIndexes = new ArrayList<>();
for(int i=0;i<array.length;i++)
Character c = array[i];
if(i != 0 && Character.isUpperCase(c))
insertIndexes.add(i);
if(insertIndexes.size() > 0)
int flag = 0;
for(int j=0;j<insertIndexes.size();j++)
String word = toLowercase4FirstLetter(name.substring(flag, insertIndexes.get(j)));
buffer.append(word).append("_");
flag = insertIndexes.get(j);
String last = toLowercase4FirstLetter(name.substring(flag));
buffer.append(last);
System.out.println(buffer.toString());
else
System.out.println(name);
private String toLowercase4FirstLetter(String word)
if(word != null && word.length() > 0)
String firstLetter = word.substring(0,1);
String others = word.substring(1);
return firstLetter.toLowerCase() + others;
else
return "";
/*
* data base column-key to java field
*/
public void convertToJava(String... dbKeys)
if(dbKeys != null && dbKeys.length > 0)
for(String key : dbKeys)
String[] words = key.split("_");
String result = toUppercase4FirstLetter(words);
System.out.println(result);
private String toUppercase4FirstLetter(String... words)
StringBuffer buffer = new StringBuffer();
if(words != null && words.length > 0)
for(int i=0;i<words.length;i++)
String word = words[i];
String firstLetter = word.substring(0, 1);
String others = word.substring(1);
String upperLetter = null;
if(i != 0)
upperLetter = firstLetter.toUpperCase();
else
upperLetter = firstLetter;
buffer.append(upperLetter).append(others);
return buffer.toString();
return "";
参考技术A 驼峰命名就是除首单词外后面单词第一个字符大写,根据数据库命名法规则,获取到一个名字时先判断是表名还是什么,然后根据对应的规则剪切拼接字符就可以了。 参考技术B 如果用mybatis可以直接转换的。 参考技术C 请教一下,数据库命名法是怎么命名的
Java 驼峰命名转下划线命名(能正确处理连续HTTP等大写)
文章目录
【1】功能(驼峰转下划线)
- 只遍历输入字符串一遍
- 能够处理处理连续的大写字母如 HTTP
- 首字母可大写可小写
/**
* 双指针法
* l之前的表示已经转换过的字符
* l-r之间的表示需要被转换的单词
* r之后表示还没有循环到的字符
*
* @param s 传入的字符串
* @return
*/
public static StringBuilder trans(String s)
StringBuilder stringBuilder = new StringBuilder();
int l = 0;
int r = 0;
while (r < s.length())
//如果下一个字符是小写
if (r + 1 < s.length() && !isUpper(s.charAt(r + 1)))
while (true)
r++;
if (r == s.length())
stringBuilder.append(s.substring(l).toLowerCase());
return stringBuilder;
if (isUpper(s.charAt(r)))
stringBuilder.append(s.substring(l, r).toLowerCase() + "_");
l = r;
break;
else if (r + 1 < s.length()) //如果下个字符是连着的大写 如HTTP
//判断是不是第一个字符,如果不判断则会出现aA 变为aa的情况 而不是a_a
if (r == 0 && isUpper(s.charAt(r + 1)))
r++;
stringBuilder.append(s.substring(l, r).toLowerCase() + "_");
l = r;
else
while (true)
r++;
if (r == s.length())
stringBuilder.append(s.substring(l).toLowerCase());
return stringBuilder;
if (!isUpper(s.charAt(r)))
r--;
stringBuilder.append(s.substring(l, r).toLowerCase() + "_");
l = r;
break;
else //如果是到达最后了
stringBuilder.append(s.substring(l).toLowerCase());
r++;
return stringBuilder;
public static boolean isUpper(char c)
return c >= 'A' && c <= 'Z';
【2】测试用例
System.out.println(trans(""));
System.out.println(trans(" "));
System.out.println(trans("isTrue"));
System.out.println(trans("myFirstName"));
System.out.println(trans("OnlineUsers"));
System.out.println(trans("Address"));
System.out.println(trans("validHTTPRequest"));
System.out.println(trans("ValidHTTPSRequestCall"));
System.out.println(trans("UsingHTTPS"));
输出:
is_true
my_first_name
online_users
address
valid_http_request
valid_https_request_call
using_https
【3】如果使用有Bug,欢迎评论区留言
以上是关于怎么用java实现驼峰命名法与数据库命名法的相互转换的主要内容,如果未能解决你的问题,请参考以下文章
Java 驼峰命名转下划线命名(能正确处理连续HTTP等大写)
Java 驼峰命名转下划线命名(能正确处理连续HTTP等大写)