SSISO Community

시소당

자바 StringTokenizer이용시 null값도 countTokens되게할수 있나요?

제목  :  자바  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

1207 view

4.0 stars