Java 分割字符串

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;
	}
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值