1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.argeo.slc.diff;
17
18 import java.util.ArrayList;
19 import java.util.List;
20
21
22
23
24
25
26
27
28
29
30 public class LineTokenizer {
31 private final List<String> tokens;
32
33
34 public LineTokenizer(String stringToParse, Character separator,
35 String noValueString) {
36 this.tokens = parse(stringToParse, separator, noValueString);
37 }
38
39
40
41
42
43 protected List<String> parse(final String stringToParse,
44 final char separator, final String noValueString) {
45
46 final int NULL = -1;
47 List<String> res = new ArrayList<String>();
48 final char[] array = stringToParse.toCharArray();
49 int lastSeparatorIndex = NULL;
50
51
52 for (int currIndex = 0; currIndex < array.length; currIndex++) {
53 char c = array[currIndex];
54 if (c == separator) {
55 if (currIndex == 0) {
56
57 res.add(new String(noValueString));
58 lastSeparatorIndex = 0;
59 } else if (lastSeparatorIndex == NULL) {
60
61 res.add(new String(array, 0, currIndex));
62 lastSeparatorIndex = currIndex;
63 } else if (lastSeparatorIndex != NULL
64 && (lastSeparatorIndex == (currIndex - 1))) {
65
66 res.add(new String(noValueString));
67 lastSeparatorIndex = currIndex;
68 } else {
69
70 res.add(new String(array, lastSeparatorIndex + 1, currIndex
71 - lastSeparatorIndex - 1));
72 lastSeparatorIndex = currIndex;
73 }
74 }
75 }
76
77
78 if (lastSeparatorIndex == NULL) {
79
80 res.add(new String(stringToParse));
81 } else if (lastSeparatorIndex == (array.length - 1)) {
82
83 res.add(new String(noValueString));
84 } else {
85
86 res.add(new String(array, lastSeparatorIndex + 1, array.length
87 - lastSeparatorIndex - 1));
88 }
89 return res;
90 }
91
92
93 public List<String> getTokens() {
94 return tokens;
95 }
96
97
98 public static List<String> tokenize(String stringToParse,
99 Character separator, String noValueString) {
100 LineTokenizer lt = new LineTokenizer(stringToParse, separator,
101 noValueString);
102 return lt.getTokens();
103 }
104
105
106 public static List<String> tokenize(String stringToParse,
107 Character separator) {
108 return tokenize(stringToParse, separator, "");
109 }
110
111 }