시소당
제목 : 자바 StringTokenizer이용시 null값도 countTokens되게할수 있나요?
글쓴이: 굿맨(simhero) 2007/10/01 13:27:33 조회수:353 줄수:15
안녕하세요
StringTokenizer을 사용하는데요
String temp ="1111,111,,,,1,1,";
StringTokenizer readData = new StringTokenizer(temp,",");
Sytem.out.println("count=" +readData.countTokens());
count =4
위와같이 4가 나옵니다. 제가 구현하고 싶은건 , 토근사이에 값이 없더라도 하나의
카운트로 인식하고자 합니다.
결론적으로 제가 원하는 값은 count=7 을 원합니다.
관련 자바 메소드가 있는지 혹 없다면 구현된 소스를 아시는 분은 답변 주세요
제목 : Re: [re]정규표현식을 적용해 봤어요.
글쓴이: 강도욱(kkid74) 2007/10/01 13:58:27 조회수:283 줄수:70
//자바메일 디코딩 관련 정규표현식 테스트하다가 만들어봤습니다.
//getTokenNum함수는 카운트 돌려주고
//strToken 함수는 자바메일쪽에서 이용하는 방법입니다.<-주석처리 했습니다.
import java.io.UnsupportedEncodingException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class TestToken{
public static void main(String args[]) throws Exception{
String temp ="1111,111,,,,1,1,";
System.out.println("count="+getTokenNum(temp,"([\\w\\W]*?)(,)([\\w\\W]*?)"));
//System.out.println(strToken(temp));
}
public static int getTokenNum(String str,String pattern) throws UnsupportedEncodingException{
if(str == null) return 0;
// Pattern p = Pattern.compile("([\\w\\W]*?)(,)([\\w\\W]*?)",Pattern.CASE_INSENSITIVE); //==?=
Pattern p = Pattern.compile(pattern,Pattern.CASE_INSENSITIVE);
// 패턴에 따라 입력 문자열을 쪼갠다.
Matcher m = p.matcher(str);
String val=null;
int cnt=0;
//if(result.length>0) i=1;
while (m.find())
{
val = m.group();
System.out.println("MATCH: " + val);
cnt++;
}
return cnt;
}
public static String strToken(String str) throws UnsupportedEncodingException{
if(str == null) return null;
Pattern p = Pattern.compile("([\\w\\W]*?)(,)([\\w\\W]*?)",Pattern.CASE_INSENSITIVE); //==?=
// 패턴에 따라 입력 문자열을 쪼갠다.
StringBuffer sb = new StringBuffer();
String[] result = p.split(str);
Matcher m = p.matcher(str);
String val=null;
int i=1;
//if(result.length>0) i=1;
System.out.println("result.length=" + result.length);
if (result.length==0){
//sb.append(result);
}else{
sb.append(result[0]);
}
while (m.find())
{
val = m.group();
System.out.println("MATCH: " + val);
sb.append(val+ ((result.length>0 && i<result.length) ? result[i]:"") );
i++;
}
if (val == null) {
System.out.println("NO MATCHES: ");
}
for (i=0; i<result.length; i++)
System.out.println("["+i+"]"+result[i]);
return sb.toString();
}
}
제목 : Re: 자바 StringTokenizer이용시 null값도 countTokens되게할수 있나요?
글쓴이: 손님(guest) 2007/10/01 14:52:09 조회수:278 줄수:9
간단하게,
String temp ="1111,111,,,,1,1,";
String[] split = temp.split(",");
System.out.println("count=" + split.length);
count=7
J2SE 1.4이상에서만 사용할 수 있습니다. 그 이하버전이라면 jakarta-oro나 regex backport를
적용해야되겠죠.
제목 : Re: 간단하게 만들어서 쓰고 있는 것입니다.
글쓴이: 진성길(sgjin) 2007/10/02 13:52:52 조회수:257 줄수:40
StringTokenizer가 공백('') 문자를 체크 안하기 때문에 간단히 만들어 쓰고 있습니다.
package common;
public class Tokenizer {
private String src;
private String delim;
private boolean nextToken = true;
public Tokenizer(String src, String delim) {
this.src = src;
this.delim = delim;
}
public String nextToken() {
int idx = src.indexOf(delim);
String token = null;
if(idx == -1 && src.length() > 0) {
token = src;
nextToken = false;
} else {
token = src.substring(0, idx);
src = src.substring(idx+1);
nextToken = true;
}
return token;
}
public boolean hasMoreTokens() {
return nextToken;
}
}
사용법은 StringTokenizer와 동일합니다.
메소드도 동일하게 했으므로 nextToken(), hasMoreTokens()로 사용할수 있습니다.
간단하게 다음토큰과 다음에 토큰이 있는지 여부를 반환하는 메소드만 존재하므로 토큰의 개수를 알려면
while문을 돌면서 체크하면 됩니다.
제목 : Re: 답변 감사합니다.
글쓴이: 굿맨(simhero) 2007/10/05 16:45:25 조회수:134 줄수:3
유용하게 사용하겠습니다.
꾸~벅
http://www.javaservice.net/%7Ejava/bbs/read.cgi?b=qna2&c=r_p&n=1191214707