/* * Copyright 1999-2010 University of Chicago * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is * distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. * * See the License for the specific language governing permissions and limitations under the License. */ package org.globus.util; import java.util.Enumeration; /* * This class is not thread safe. */ public class QuotedStringTokenizer implements Enumeration { private int limit; private int start; private String str; public QuotedStringTokenizer(String str) { this.str = str; start = 0; limit = str.length(); } public Object nextElement() { return nextToken(); } public String nextToken() { while ((start < limit) && Character.isWhitespace(str.charAt(start))) { start++; // eliminate leading whitespace } if (start == limit) return null; StringBuffer buf = new StringBuffer(limit-start); char ch; char quote = str.charAt(start); if (quote == '"' || quote == '\'') { start++; for (int i=start;i<limit;i++) { ch = str.charAt(i); start++; if (ch == quote) { break; } else if (ch == '\\') { buf.append( str.charAt(++i) ); start++; } else { buf.append(ch); } } return buf.toString(); } else { for (int i=start;i<limit;i++) { ch = str.charAt(i); start++; if (Character.isWhitespace(ch)) { break; } else { buf.append(ch); } } } return buf.toString(); } public boolean hasMoreElements() { return hasMoreTokens(); } public boolean hasMoreTokens() { while ((start < limit) && (str.charAt(start) <= ' ')) { start++; // eliminate leading whitespace } return (start != limit); } public int countTokens() { int localStart = start; int i = 0; while( nextToken() != null ) { i++; } start = localStart; return i; } }