Clover coverage report - brownies library - 1.0-beta-1 Coverage timestamp: 月 8 16 2004 17:14:42 GMT+09:00 FRAMES NO FRAMES |
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% |

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 |  |
     }