要解析的数据
////////////////////////////////////////////'admin,guest','123','ok;;';
'andy','45,;6','o"k;;';
'mciro','12,;3','o;k;;';
'soft,guest','12;3;','ok,';
'admin,guest','12;3','o"k';分离出来结果:
/////////////////////////////////////
admin,guest
123
ok;;andy
45,;6
o"k;;这些在SQL中都能正常解释,为什么我想了好几天没有想出好的办法来解析.希望有这方面经验的朋友帮帮忙!!!不知道我说的请不清楚. 能不能看懂.
////////////////////////////////////////////'admin,guest','123','ok;;';
'andy','45,;6','o"k;;';
'mciro','12,;3','o;k;;';
'soft,guest','12;3;','ok,';
'admin,guest','12;3','o"k';分离出来结果:
/////////////////////////////////////
admin,guest
123
ok;;andy
45,;6
o"k;;这些在SQL中都能正常解释,为什么我想了好几天没有想出好的办法来解析.希望有这方面经验的朋友帮帮忙!!!不知道我说的请不清楚. 能不能看懂.
public static void main(String[] args) {
String str = "'admin,guest','123','ok;;'"; StringTokenizer st = new StringTokenizer(str, ",");
while (st.hasMoreTokens()) {
String strTemp = st.nextToken();
if (strTemp.length() > 2)
System.out.println(strTemp.substring(1, strTemp.length() - 1));
}
}
String str = "'admin,guest','123','ok;;'"; ArrayList<String> list = new ArrayList<String>();
parseString(str, list);
for(String strTemp:list)
System.out.println(strTemp);
}
public static void parseString(String str,ArrayList<String> list){
if(!str.startsWith("'")) return;
str = str.substring(1);
int index = str.indexOf("',");
if(index>0){
list.add(str.substring(0,index));
parseString(str.substring(index+2), list);
return;
}
index = str.indexOf("'");
if(index>0)
list.add(str.substring(0,index));
}
满足则继续,不满足则出错import java.util.ArrayList;
import java.util.DuplicateFormatFlagsException;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class Test {
public static void main(String[] args){
String test="'admin,guest','123','ok;;';";
ArrayList<String> value=divString(test);
for(Iterator it=value.iterator();it.hasNext();){
System.out.println(it.next());
}
}
public static ArrayList<String >divString(String test){
ArrayList<String> result=new ArrayList<String>();
String regex="^\\'(.*)\\'\\;$"; Pattern p=Pattern.compile(regex);
Matcher m=p.matcher(test);
if(m.matches()){
test=test.substring(1, test.length()-2);
}else{
throw new DuplicateFormatFlagsException("'test';");
}
for(String t:test.split("'")){
if(!t.equals(",")){
result.add(t);
}
}
return result;
}
}
起初我一直以为能有正则表达式能去直接处理这种问题,在网上苦苦的找了几天 ,结果都不是我想要的结果.今天我又安装我的要求把代码填写完成了.
/**
* 字符串处理(Java分析类似SQL语句内的数据)遇到引号很难处理
* 要解析的数据
//////////////////////////////////////////// 'admin,guest','123','ok;;';
'andy','45,;6','o"k;;';
'mciro','12,;3','o;k;;';
'soft,guest','12;3;','ok,';
'admin,guest','12;3','o"k'; 分离出来结果:
/////////////////////////////////////
admin,guest
123
ok;; andy
45,;6
o"k;; 这些在SQL中都能正常解释,为什么我想了好几天没有想出好的办法来解析.希望有这方面经验的朋友帮帮忙!!! 不知道我说的请不清楚. 能不能看懂. * MciroAndyFan*
*
*/
import java.util.ArrayList;
import java.util.DuplicateFormatFlagsException;
import java.util.List;
import java.util.regex.Pattern;public class String_SQL2 { public String_SQL2() {
// TODO Auto-generated constructor stub
} /**
* 利用主函数[测试]
* @param args
*/
public static void main(String[] args) {
///////测试输出字符串///////////
String test = "'admin,guest','123','ok;;';'admin,guest','123','ok;;';";
for(String str:OneByOne(test)){ //得到每一条记录组
System.out.println("//////////////测试输出结果////////////////////");
for (String s: divString(str)) { //把每组记录分离出数据
System.out.println(s);
}
} } /**
* 把数据分割成一条一条数据
* @param str
* @return
*/
public static List<String> OneByOne(String str){
List<String> list=new ArrayList<String>(); //利用上行机制声明List容器
for(String s:str.split("';")){ //找到每条数据的结尾
list.add(s+"';"); //分割后数据就不真实了 还要加上';
}
return list;
}
/**
* 得到每条记录
* @param test
* @return
*/
public static List<String> divString(String test) {
List<String> result = new ArrayList<String>(); //利用上行机制声明List容器
if (Pattern.matches("^\\'(.*)\\'\\;$", test)) {//利用正则测试字符串是否符合要求
test = test.substring(1, test.length() - 2); //去掉开头的'和末尾的';符合
} else { //否则有异常出现
throw new DuplicateFormatFlagsException("异常:"+test+"不符合这个正则'test';");
}
for (String t : test.split("'")) { //截取后的字符串admin,guest','123','ok;;用(')分割
if (!t.equals(",")) {//分割后应该是[admin,guest , 123] 所以去掉(,)逗号
result.add(t); //把正确的数据输入到List容器
}
}
return result; //把单个数据所有结果返回
}}
控制台打印效果如下:
//////////////测试输出结果////////////////////
admin,guest
123
ok;;
//////////////测试输出结果////////////////////
admin,guest
123
ok;;
1楼的:caiming250
4楼的:rain_night分别看我7楼的代码 我分别都引用了这两个人的思想. 这分很不好分啊!!