Clover coverage report - brownies library - 1.0-beta-1
Coverage timestamp: 月 8 16 2004 17:14:42 GMT+09:00
file stats: LOC: 91   Methods: 4
NCLOC: 43   Classes: 1
30 day Evaluation Version distributed via the Maven Jar Repository. Clover is not free. You have 30 days to evaluate it. Please visit http://www.thecortex.net/clover to obtain a licensed version of Clover
 
 Source file Conditionals Statements Methods TOTAL
SVTokenizer.java 0% 0% 0% 0%
coverage
 1   
 package org.asyrinx.brownie.core.csv;
 2   
 
 3   
 /**
 4   
  * CSVやTSVなど区切られた文字列を解析するクラス
 5   
  * 
 6   
  * @author kadowaki
 7   
  */
 8   
 public class SVTokenizer {
 9   
 
 10   
     /** 解析する文字列 */
 11   
     private String line;
 12   
 
 13   
     /** 区切り文字 */
 14   
     private char delim;
 15   
 
 16   
     /** 引用符 */
 17   
     private char quote;
 18   
 
 19   
     /** 文字列内での現在の位置 */
 20   
     private int current;
 21   
 
 22   
     /** 文字列の最後の位置 */
 23   
     private int max;
 24   
 
 25   
     /**
 26   
      * 区切り文字・引用符を選択するときのコンストラクタ
 27   
      * 
 28   
      * @param line
 29   
      *            解析する文字列
 30   
      * @param delim
 31   
      *            区切り文字
 32   
      * @param quote
 33   
      *            引用符
 34   
      */
 35  0
     public SVTokenizer(String line, char delim, char quote) {
 36  0
         this.line = line;
 37  0
         this.delim = delim;
 38  0
         this.quote = quote;
 39  0
         current = 0;
 40  0
         max = line.length();
 41   
     }
 42   
 
 43   
     /**
 44   
      * 次のデータがあるかどうかを判定する
 45   
      * 
 46   
      * @return boolean 次のデータの有無
 47   
      */
 48  0
     public boolean hasMoreTokens() {
 49  0
         return (nextDelim(current) <= max);
 50   
     }
 51   
 
 52   
     /**
 53   
      * 次のデータを返す
 54   
      * 
 55   
      * @return String 次のデータ
 56   
      */
 57  0
     public String nextToken() {
 58  0
         int work = current;
 59  0
         current = nextDelim(current);
 60  0
         StringBuffer buffer = new StringBuffer();
 61  0
         while (work < current) {
 62  0
             char ch = line.charAt(work++);
 63  0
             if (ch != quote) {
 64  0
                 buffer.append(ch);
 65   
             }
 66   
         }
 67  0
         current++;
 68  0
         return new String(buffer);
 69   
     }
 70   
 
 71   
     /**
 72   
      * 次の区切り文字の位置を返す
 73   
      * 
 74   
      * @param position
 75   
      *            検索を開始する位置
 76   
      * @return int 次の区切り文字の位置
 77   
      */
 78  0
     private int nextDelim(int position) {
 79  0
         boolean inquote = false;
 80  0
         while (position < max) {
 81  0
             char ch = line.charAt(position);
 82  0
             if (ch == quote) {
 83  0
                 inquote = !inquote;
 84  0
             } else if (!inquote && (ch == delim)) {
 85  0
                 break;
 86   
             }
 87  0
             position++;
 88   
         }
 89  0
         return position;
 90   
     }
 91   
 }