找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1191|回复: 1

Java中getter setter命名规则重定义

[复制链接]

10

主题

10

帖子

0

积分

新手上路

威望
30 点
金币
0
注册时间
2013-5-14
最后登录
2013-5-24
在线时间
1 小时
听众
4
收听
0
发表于 2013-5-18 18:44 | 显示全部楼层 |阅读模式
奋斗到了凌晨两点半终于把最近项目需要的一个需求搞定了,因为客户端与数据库之间的一个数据服务框架命名规则不符合java的命名规则,所以这里需要做一个转换,大概功能实现了,算法方面还有待优化。。
package readandwrite;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.regex.Pattern;
public class ReadAndWrite {
private static BufferedReader br;
private static BufferedWriter bw;
/**
* @param args
* @throws IOException
*
* 两个问题:1 javabean非规范命名 如开头大写 2 时间 Timestamp将导致的插入问题!!!!!!
*/
public static void main(String[] args) throws IOException {

File dir = new File("d:\\test\\hibernate\\");
String newPath = "d:\\test\\hibernate_new\\";

File file2 = new File(newPath);
if(!file2.exists()) {
file2.mkdir();//创建文件夹
}
File file[] = dir.listFiles();

for (int i = 0; i < file.length; i++) {

if(file.isDirectory()) {//文件夹直接跳过
continue;
}

String filename = file.getName();

br = new BufferedReader(new InputStreamReader(new FileInputStream(file.getAbsolutePath())));

File f = new File(newPath+filename);

if(f.exists()){
f.delete();//删除旧文件,避免重复写入
}
f.createNewFile();

FileWriter fw = new FileWriter(f,true);
bw = new BufferedWriter(fw);

if("java".equals(exn(filename))) {//解析实体类

String data = null;

while((data = br.readLine())!=null)
{
bw.write(split(data)+"\n");
bw.flush();
}

} else if("xml".equals(exn(filename))) {//解析映射文件

String data = null;

while((data = br.readLine())!=null)
{
bw.write(sp2(data)+"\n");
bw.flush();
}
}
}

}

/*
* 获取文件扩展名
*/
public static String exn(String filename) {
int k = filename.lastIndexOf(".");
if(k>-1 && k<(filename.length()-1)) {
return filename.substring(k+1);
} else {
return "";
}
}
/*==============================================解析.java实体类======================================================*/
/*
* 拆分-关键词变小写 1
* 规则:将带有驼峰格式的子串变小写
*/
public static String split(String s) {

String data = "";

String reg = "\\s|\\.|\\,|\\;|\\(|\\)|\\{|\\}|\\\"";

String[] word = s.split(reg);//java标识符

ArrayList<String> tag = new ArrayList<String>();
String[] tem = s.split("");

// 保存标点符号
for(int i=0; i<tem.length; i++)
{
if(tem.matches(reg)) {
tag.add(tem);
}
}

int k = 0;
for (int i = 0; i < word.length; i++) {

String fw = format(word);
www.dr96.com
if(i < tag.size()) {
data += fw+tag.get(i);
} else {
data += fw;
}
k = i;
}

if(tag.size() > k) {
for (int i = k+1; i < tag.size(); i++) {
data += tag.get(i);
}
}

return data;
}

/*
* 驼峰格式子串去大写
*/
public static String format(String str) {
String reg = "([a-z]+[A-Z][a-z]+)*";
Pattern p = Pattern.compile(reg);
if(p.matcher(str).matches()) {
return str.toLowerCase();
}
return str;
}

/*==============================================解析.hbm.xml映射文件======================================================*/

/*
* 拆分-关键词变小写 2
* 将 组合 id name = "" || property name = "" 双引号中的属性值变小写
*/
public static String sp2(String str) {
if(str.contains("<id name") || str.contains("<property name")) {
return split(str);
}
return str;
}
}

www.dr96.com       aaiyin.com

0

主题

4034

帖子

4062

积分

论坛元老

威望
4060 点
金币
0
注册时间
2013-3-21
最后登录
2022-10-20
在线时间
0 小时
听众
8
收听
0
发表于 2013-5-18 18:44 | 显示全部楼层
楼主呀,,,您太有才了。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表