开发时,一般数据库的字段命名是下划线风格,Java编程时字段命名一般是驼峰风格。
在实体和域模型创建初期,我们经常需要对同一字段进行命名风格的反复切换。
talk is cheap, show me the code.
测试用例
package com.itplh.generator;
public class ConvertTest {
public static void main(String[] args) {
Underline2JavaPrivateFieldConverter.run();
HumpField2UnderlineConverter.run("D:\\User.java");
}
}
控制台输出
private String username;
private String createTime;
private String lastUpdateTime;
username
create_time
last_update_time
input.txt
username
create_time
last_update_time
User.java
@Data
public class User {
private String username;
private String createTime;
private String lastUpdateTime;
}
驼峰转下划线
HumpField2UnderlineConverter.java
package com.itplh.generator;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class HumpField2UnderlineConverter {
public static void run(String classAbsolutePath) {
try (BufferedReader reader = new BufferedReader(new FileReader(classAbsolutePath))) {
reader.lines()
.map(String::trim)
.filter(e -> e.startsWith("private "))
.map(e -> e.split(" ")[2])
.map(e -> e.endsWith(";") ? e.substring(0, e.length() - 1) : e)
.map(HumpField2UnderlineConverter::convertHump2Underline)
.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
private static String convertHump2Underline(String humpField) {
StringBuilder underlineField = new StringBuilder();
for (int i = 0; i < humpField.length(); i++) {
char c = humpField.charAt(i);
if (c >= 'A' && c <= 'Z') {
underlineField.append('_').append((char) (c + 32));
continue;
}
underlineField.append(c);
}
return underlineField.toString();
}
}
PS:也可以使用java.beans.Introspector#getBeanInfo(java.lang.Class<?>, java.lang.Class<?>)来读取类的属性名。
下划线转驼峰
Underline2JavaPrivateFieldConverter.java
package com.itplh.generator;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
public class Underline2JavaPrivateFieldConverter {
public static void run() {
try (BufferedReader reader = new BufferedReader(new FileReader("CodeGenerator/input.txt"))) {
reader.lines()
.map(e -> e.trim().toLowerCase())
.filter(e -> e.length() > 1)
.map(line -> {
return Arrays.stream(line.split(" "))
.findFirst()
.map(e -> e.startsWith("`") ? e.substring(1, e.length() - 1) : e)
.map(Underline2JavaPrivateFieldConverter::javaPrivateFieldSplicer)
.orElse("");
}).forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
private static String javaPrivateFieldSplicer(String underlineField) {
return "private String " + convertUnderline2Hump(underlineField) + ";";
}
private static String convertUnderline2Hump(String underlineField) {
underlineField = underlineField.trim();
if (underlineField.startsWith("_") || underlineField.endsWith("_")) {
return underlineField;
}
underlineField = underlineField.toLowerCase();
StringBuilder humpField = new StringBuilder();
humpField.append(underlineField.charAt(0));
for (int i = 1; i < underlineField.length(); i++) {
if ('_' == underlineField.charAt(i)) {
i++;
humpField.append((char) (underlineField.charAt(i) - 32));
continue;
}
humpField.append(underlineField.charAt(i));
}
return humpField.toString();
}
}
6万+



被折叠的 条评论
为什么被折叠?



