複雑な構文解析は Perl5Util(Jakarta ORO) や java.util.regex を使う、
もっと複雑になるとXMLパーサーやJavaCCの出番になるけど

Strint#split()を使う

  1. サンプルプログラム
    String str = "abc,def,ghi";
    String[] columns = str.split(",");
    System.out.println( columns.length );
    for( String s : columns ){
    	System.out.println( s );
    }
     
    実行結果
    3
    abc
    def
    ghi
  2. サンプルプログラム
    String str = "abc,def,ghi,";
    String[] columns = str.split(",");
    System.out.println( columns.length );
    for( String s : columns ){
    	System.out.println( s );
    }
     
    実行結果
    3
    abc
    def
    ghi

StringTokenizer?を使う

  1. 単純にカンマ区切りの文字列を扱うだけならば以下のようにすればよい
    StringTokenizer tokenizer = new StringTokenizer( string , "," );
    
    int cnt = 0;
    while( tokenizer.hasMoreToken() ){
      data[ cnt++ ] = Integer.parseInt( tokenizer.nextToken().trim() ) );
    }
    値にパースするときには、切り出した文字をtrim()するのがミソ
     
  2. 扱う文字列の最後に","がある時には、Tokenの数を数えてforループで回す
    string = string.charAt( string.length() - 1 ) == ',' ? string : string + ",";
    StringTokenizer tokenizer = new StringTokenizer( string , "," );
    
    int dataSize = tokenizer.countTokens() - 1;
    for( int cnt = 0 ; cnt < dataSize ; cnt++ ){
      data[ cnt ] = Integer.parseInt( tokenizer.nextToken().trim() );
    }
  3. 扱うデータが3個で1セットになっているときなど
    StringTokenizer tokenizer = new StringTokenizer( string , "," );
    
    int dataSize = tokenizer.countTokens();
    dataSize = dataSize - dataSize % 3
    for( int cnt = 0 ; cnt < dataSize ; cnt+=3 ){
      x = Integer.parseInt( tokenizer.nextToken().trim() );
      y = Integer.parseInt( tokenizer.nextToken().trim() );
      data[x][y] = Integer.parseInt( tokenizer.nextToken().trim() );
    }
    不正な入力に対する例外処理が弱いような気がするけど・・・そういう例外処理がひつようなら java.util.Regex を使って正規表現で切り出した方が賢い

Java#JavaSE


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS   sitemap
Last-modified: 2006-02-18 (土) 13:04:04 (6868d)
Short-URL: http://at-sushi.com/pukiwiki/index.php?cmd=s&k=4ebe05315f
ISBN10
ISBN13
9784061426061