package com.kaid.xyy.util;
import java.util.ArrayList;
import java.util.List;
public class CharSplitter {
public static void main(String []args){
try{
CharSplitter obj=new CharSplitter();
String str="aaa,bb,de, ,a,fd,dfaf,dfasfsdfe";
List<String> resultList = obj.CSVExcute(str);
int i=0;
for(String showStr:resultList){
i++;
System.out.println("the "+i+"element:"+showStr);
}
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
public List<String> CSVExcute(String astr) throws Exception{
List<String>strList=new ArrayList<String>();
int status= 0;
String evaStr = "";
char decChr;
for (int i = 0; i < astr.length(); i++) {
decChr=astr.charAt(i);
if(status==0){ //为未输入状态
if(decChr==' '){
status=0;
}
else if (decChr==',') {
strList.add(evaStr);
evaStr="";
status=0;
}
else if(decChr=='"') {
status=3;
}
else {
evaStr+=decChr;
status=1;
}
}
else if (status==1) { //读入状态
if(decChr==','){
strList.add(evaStr);
evaStr="";
status=0;
}
else if(decChr=='"'){
throw new Exception("Error");
}
else if(decChr==' '){
evaStr+=decChr;
status=2;
}
else {
evaStr+=decChr;
status=1;
}
}
else if (status==2) { //空格判断状态
if(decChr==','){
strList.add(evaStr);
evaStr="";
status=0;
}
else if (decChr==' ') {
evaStr+=decChr;
status=2;
}
else {
evaStr+=decChr;
status=1;
}
}
else if (status==3) { //双引号判断状态
if(decChr=='"'){
status=4;
}
else if (decChr==',') {
throw new Exception("Error");
}
else {
evaStr+=decChr;
status=3;
}
}
else if (status==4) { //内部引号判断状态
if(decChr==','){
strList.add(evaStr);
evaStr="";
status=0;
}
else if (decChr=='"') {
evaStr = evaStr + "\"";
status=3;
}
else if (decChr==' ') {
evaStr+=decChr;
status=5;
}
else {
throw new Exception("Error");
}
}
else if (status==5) { //准备结束状态
if(decChr==','){
strList.add(evaStr);
evaStr="";
status=0;
}
else if (decChr==' ') {
evaStr+=decChr;
status=5;
}
else {
throw new Exception("Error");
}
}
if(evaStr.length()>0 && i==astr.length()-1){
strList.add(evaStr);
}
if (astr.length()>=100) {
throw new Exception("Error");
}
}
return strList;
}
}
Java 分割字符串
最新推荐文章于 2024-06-17 21:41:37 发布