Java 如何将pojo属性转换为数据库列名

Java 如何将pojo属性转换为数据库列名,java,regex,Java,Regex,我正在尝试从POJO字段生成数据库列名。例如,如果pojo的字段为 origOrderDate --> ORIG_ORDER_DATE custName --> CUST_NAME firstOrigDatePort --> FIRST_ORIG_DATE_PORT ... ... 我有以下代码 String testStr = "origOrderDate"; String regEx = "([A-Z])"; Pattern pattern = Pattern.compi

我正在尝试从POJO字段生成数据库列名。例如,如果pojo的字段为

origOrderDate --> ORIG_ORDER_DATE
custName --> CUST_NAME
firstOrigDatePort --> FIRST_ORIG_DATE_PORT
...
...
我有以下代码

String testStr = "origOrderDate";
String regEx = "([A-Z])";
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(testStr);
StringBuffer sb = new StringBuffer();
while (matcher.find()) {
    System.out.printf("Found %d, of capital letters in %s%n", matcher.groupCount(), testStr);
    matcher.appendReplacement(sb, "_$1");
}

System.out.println(sb.toString().toUpperCase());
它丢失了字符串的结尾部分。有什么想法吗

ORIG_ORDER_D
缺少附加字符串结尾的命令。引用Javadoc:

appendReplacement和appendTail方法可以串联使用,以便将结果收集到现有的字符串缓冲区中

请注意,另一种选择是使用谷歌番石榴:


您可以使用以下代码,在一行代码中完成您正在做的事情:-

public static void main(String[] args){
       String testStr = "origOrderDate";
       String convertedString = testStr.replaceAll("(\\p{Upper})", "_$1").toUpperCase();
       System.out.println(convertedString);
   }
在上面的代码中:表达式\p{Upper}将匹配每个大写字母,并将其替换为_UppercaseCharacter

根据@Pedro Pinheiro,我们还可以:

String convertedString = testStr.replaceAll("([A-Z])", "_$1").toUpperCase();

Regex将起作用,但这里有另一种简单和更干净的方式与gauva

import static com.google.common.base.CaseFormat.*;

String columnName = LOWER_CAMEL.to(UPPER_UNDERSCORE, "origOrderDate");
反向转换将是

String fieldName = UPPER_UNDERSCORE.to(LOWER_CAMEL, "ORIG_ORDER_DATE")

您需要在循环之后添加。换句话说:
([A-Z])
是的,您也可以这样做。编辑了我的答案。
import static com.google.common.base.CaseFormat.*;

String columnName = LOWER_CAMEL.to(UPPER_UNDERSCORE, "origOrderDate");
String fieldName = UPPER_UNDERSCORE.to(LOWER_CAMEL, "ORIG_ORDER_DATE")