package org.osgi.service.indexer.impl.util; import java.util.List; public class QuotedTokenizer { String string; int index = 0; String separators; boolean returnTokens; boolean ignoreWhiteSpace = true; String peek; char separator; public QuotedTokenizer(String string, String separators, boolean returnTokens) { if (string == null) throw new IllegalArgumentException("string argument must be not null"); this.string = string; this.separators = separators; this.returnTokens = returnTokens; } public QuotedTokenizer(String string, String separators) { this(string, separators, false); } public String nextToken(String separators) { separator = 0; if (peek != null) { String tmp = peek; peek = null; return tmp; } if (index == string.length()) return null; StringBuilder sb = new StringBuilder(); while (index < string.length()) { char c = string.charAt(index++); if (Character.isWhitespace(c)) { if (index == string.length()) break; else { sb.append(c); continue; } } if (separators.indexOf(c) >= 0) { if (returnTokens) peek = Character.toString(c); else separator = c; break; } switch (c) { case '"' : case '\'' : quotedString(sb, c); break; default : sb.append(c); } } String result = sb.toString().trim(); if (result.length() == 0 && index == string.length()) return null; return result; } public String nextToken() { return nextToken(separators); } private void quotedString(StringBuilder sb, char c) { char quote = c; while (index < string.length()) { c = string.charAt(index++); if (c == quote) break; if (c == '\\' && index < string.length() && string.charAt(index + 1) == quote) c = string.charAt(index++); sb.append(c); } } public String[] getTokens() { return getTokens(0); } private String[] getTokens(int cnt) { String token = nextToken(); if (token == null) return new String[cnt]; String result[] = getTokens(cnt + 1); result[cnt] = token; return result; } public char getSeparator() { return separator; } public List<String> getTokenSet() { List<String> list = Create.list(); String token = nextToken(); while (token != null) { list.add(token); token = nextToken(); } return list; } }