1 package org.apache.maven.it.util.cli;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 import java.util.StringTokenizer;
45
46
47
48
49
50
51
52 public final class EnhancedStringTokenizer
53 {
54 private StringTokenizer cst = null;
55
56 String cdelim;
57
58 final boolean cdelimSingleChar;
59
60 final char cdelimChar;
61
62 boolean creturnDelims;
63
64 String lastToken = null;
65
66 boolean delimLast = true;
67
68 public EnhancedStringTokenizer( String str )
69 {
70 this( str, " \t\n\r\f", false );
71 }
72
73 public EnhancedStringTokenizer( String str, String delim )
74 {
75 this( str, delim, false );
76 }
77
78 public EnhancedStringTokenizer( String str, String delim, boolean returnDelims )
79 {
80 cst = new StringTokenizer( str, delim, true );
81 cdelim = delim;
82 creturnDelims = returnDelims;
83 cdelimSingleChar = ( delim.length() == 1 );
84 cdelimChar = delim.charAt( 0 );
85 }
86
87 public boolean hasMoreTokens()
88 {
89 return cst.hasMoreTokens();
90 }
91
92 private String internalNextToken()
93 {
94 if ( lastToken != null )
95 {
96 String last = lastToken;
97 lastToken = null;
98 return last;
99 }
100
101 String token = cst.nextToken();
102 if ( isDelim( token ) )
103 {
104 if ( delimLast )
105 {
106 lastToken = token;
107 return "";
108 }
109 else
110 {
111 delimLast = true;
112 return token;
113 }
114 }
115 else
116 {
117 delimLast = false;
118 return token;
119 }
120 }
121
122 public String nextToken()
123 {
124 String token = internalNextToken();
125 if ( creturnDelims )
126 {
127 return token;
128 }
129 if ( isDelim( token ) )
130 {
131 return hasMoreTokens() ? internalNextToken() : "";
132 }
133 else
134 {
135 return token;
136 }
137 }
138
139 private boolean isDelim( String str )
140 {
141 if ( str.length() == 1 )
142 {
143 char ch = str.charAt( 0 );
144 if ( cdelimSingleChar )
145 {
146 if ( cdelimChar == ch )
147 {
148 return true;
149 }
150 }
151 else
152 {
153 if ( cdelim.indexOf( ch ) >= 0 )
154 {
155 return true;
156 }
157 }
158 }
159 return false;
160
161 }
162 }