📄 gscsvtokenizer.java
字号:
package jp.co.sjts.gsession.tools;
/**
* <p>CSV僷乕僒乕
*
* @author hideyuki kitade <kitade@sjts.co.jp>
*/
public class GSCsvTokenizer{
private static String strCsv = null ; //CSV僨乕僞
private int intPos = 0 ; //億僕僔儑儞
private int intMax ; //僨乕僞挿
private char chrDelim = ',' ; //嬫愗傝暥帤(僨僼僅儖僩偱僇儞儅)
private String strChgChr = "," ; //嬫愗傝暥帤傪抲偒姺偊傞暥帤楍(僨僼僅儖僩偱僇儞儅)
/**
* CSV僨乕僞偺堦峴傪僙僢僩偟傑偡丅
*
* @param CSV僨乕僞偺堦峴
*/
public GSCsvTokenizer(String strCsv){
this.strCsv = strCsv;
intMax = strCsv.length();
}
/**
* CSV僨乕僞偺堦峴傪僙僢僩偟傑偡丅<BR>
* 傑偨嬫愗傝暥帤傪僙僢僩偟傑偡丅<BR>
* 偨偩偟嬫愗傝暥帤偑堦暥帤埲忋偺応崌偼弶傔偺堦暥帤偑嬫愗傝暥帤偲側傝傑偡丅
*
* @param CSV僨乕僞偺堦峴
* @param 嬫愗傝暥帤
*/
public GSCsvTokenizer(String strCsv,String strDelim){
this.strCsv = strCsv;
this.chrDelim = strDelim.charAt(0);
intMax = strCsv.length();
}
/**
* CSV僨乕僞偺堦峴傪僙僢僩偟傑偡丅<BR>
* 傑偨嬫愗傝暥帤傪僙僢僩偟傑偡丅<BR>
*
* @param CSV僨乕僞偺堦峴
* @param 嬫愗傝暥帤
*/
public GSCsvTokenizer(String strCsv,char chrDelim){
this.strCsv = strCsv;
this.chrDelim = chrDelim;
intMax = strCsv.length();
}
/**
* CSV僨乕僞偺堦峴傪僙僢僩偟傑偡丅<BR>
* 傑偨嬫愗傝暥帤傪僙僢僩偟傑偡丅<BR>
* 偨偩偟嬫愗傝暥帤偑堦暥帤埲忋偺応崌偼弶傔偺堦暥帤偑嬫愗傝暥帤偲側傝傑偡丅<BR><BR>
* 偙偙偱偼僇儞儅埲奜偺嬫愗傝暥帤傪巜掕偡傞応崌偵巊梡偟傑偡丅<BR>
*
* @param CSV僨乕僞偺堦峴
* @param 嬫愗傝暥帤
* @param 僇儞儅埲奜偺嬫愗傝暥帤
*/
public GSCsvTokenizer(String strCsv,String strDelim,String strChgChr){
this.strCsv = strCsv;
this.chrDelim = strDelim.charAt(0);
this.strChgChr = strChgChr;
intMax = strCsv.length();
}
/**
* CSV僨乕僞偺堦峴傪僙僢僩偟傑偡丅<BR>
* 傑偨嬫愗傝暥帤傪僙僢僩偟傑偡丅<BR>
* 偨偩偟嬫愗傝暥帤偑堦暥帤埲忋偺応崌偼弶傔偺堦暥帤偑嬫愗傝暥帤偲側傝傑偡丅<BR><BR>
* 偙偙偱偼僇儞儅埲奜偺嬫愗傝暥帤傪巜掕偡傞応崌偵巊梡偟傑偡丅<BR>
*
* @param CSV僨乕僞偺堦峴
* @param 嬫愗傝暥帤
* @param 僇儞儅埲奜偺嬫愗傝暥帤
*/
public GSCsvTokenizer(String strCsv,char chrDelim,String strChgChr){
this.strCsv = strCsv;
this.chrDelim = chrDelim;
this.strChgChr = strChgChr;
intMax = strCsv.length();
}
/**
* 師偺僇儞儅偺埵抲傪曉偡
*
* @param 奐巒埵抲
* @return 師偺僇儞儅偺埵抲傪曉偡
*/
private int __nextCm(int intStart){
boolean blnFlg = false;
while (intStart < intMax) {
char ch = strCsv.charAt(intStart);
if (!blnFlg && ch == chrDelim) {
break;
} else if ('"' == ch) {
blnFlg = !blnFlg; // ""偺張棟傕偙傟偱OK
}
intStart ++;
}
return intStart;
}
/**
* 崁栚悢傪曉偡
*
* @return 崁栚悢傪曉偡
*/
public int countTokens(){
int i = 0;
int ret = 1;
while ((i = __nextCm(i)) < intMax) {
i ++;
ret ++;
}
return ret;
}
/**
* 傑偩崁栚偑巆偭偰偄傞偐偳偆偐挷傋傞丅
*
* @return 傑偩崁栚偑偺偙偭偰偄傞側傜true
*/
public boolean hasMoreTokens() {
// "<=" 偱側偔丄"<" 偩偲枛旜偺崁栚傪惓偟偔張棟偱偒側偄丅
return (__nextCm(intPos) <= intMax);
}
/**
* 師偺崁栚偺暥帤楍傪曉偡丅
*
* @return 師偺崁栚
*/
public String nextToken() {
if (intPos > intMax){ //師偺僨乕僞偑側偔側偭偰傕僄儔乕側偟偵偡傞
return "";
}
int intCnt = intPos; //尰嵼偺億僕僔儑儞傪曐懚
intPos = __nextCm(intCnt); //師偺僇儞儅埵抲
StringBuffer strb = new StringBuffer();
while (intCnt < intPos) {
char chr = strCsv.charAt(intCnt++);
if (chr == chrDelim) { //嬫愗傝暥帤曄姺
strb.append(strChgChr);
}else{
if (chr == '"') { //"偼庢傝奜偡
if ((intCnt < intPos) && (strCsv.charAt(intCnt) == '"')) { // "偑扨撈偱尰傟偨偲偒偼壗傕偟側偄
strb.append(chr);
intCnt ++;
}
}else{
strb.append(chr);
}
}
}
intPos ++; //尰嵼埵抲傪僇儞儅偐傜堏摦
return new String(strb);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -