All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mchange.util.impl.QuotesAndWhitespaceTokenizer Maven / Gradle / Ivy

There is a newer version: 0.3.1
Show newest version
/*
 * Distributed as part of mchange-commons-java 0.2.11
 *
 * Copyright (C) 2015 Machinery For Change, Inc.
 *
 * Author: Steve Waldman 
 *
 * This library is free software; you can redistribute it and/or modify
 * it under the terms of EITHER:
 *
 *     1) The GNU Lesser General Public License (LGPL), version 2.1, as 
 *        published by the Free Software Foundation
 *
 * OR
 *
 *     2) The Eclipse Public License (EPL), version 1.0
 *
 * You may choose which license to accept if you wish to redistribute
 * or modify this work. You may offer derivatives of this work
 * under the license you have chosen, or you may provide the same
 * choice of license which you have been offered here.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * You should have received copies of both LGPL v2.1 and EPL v1.0
 * along with this software; see the files LICENSE-EPL and LICENSE-LGPL.
 * If not, the text of these licenses are currently available at
 *
 * LGPL v2.1: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
 *  EPL v1.0: http://www.eclipse.org/org/documents/epl-v10.php 
 * 
 */

package com.mchange.util.impl;

import java.util.*;
import com.mchange.util.*;

public class QuotesAndWhitespaceTokenizer extends StringEnumerationHelperBase
{
  Object     current;
  LinkedList list = new LinkedList();

  public QuotesAndWhitespaceTokenizer(String string) throws IllegalArgumentException
    {
      int i = 0;
      int len = string.length();
      while (i < len)
	{
	  int q = string.indexOf ('"', i);
	  if (q >= 0)
	    {
	      StringTokenizer toks = new StringTokenizer(string.substring(i, q));
	      if (toks.hasMoreTokens()) list.add(toks);
	      int q2 = string.indexOf('"', q + 1);
	      if (q2 == -1)
		throw new IllegalArgumentException("Badly quoted string: " + string);
	      list.add(string.substring(q + 1, q2));
	      i = q2 + 1;
	    }
	  else
	    {
	      StringTokenizer toks = new StringTokenizer(string.substring(i));
	      if (toks.hasMoreTokens()) list.add(toks);
	      break;
	    }
	}
      advance();
    }

  public synchronized boolean hasMoreStrings()
    {return current != null;}

  public synchronized String nextString()
    {
      if (current instanceof String)
	{
	  String out = (String) current;
	  advance();
	  return out;
	}
      else
	{
	  StringTokenizer toks = (StringTokenizer) current;
	  String out = toks.nextToken();
	  if (!toks.hasMoreTokens()) advance();
	  return out;
	}
    }

  private void advance()
    {
      if (list.isEmpty())
	current = null;
      else
	{
	  current = list.getFirst();
	  list.removeFirst();
	}
    }

  public static void main(String[] argv)
    {
      String test = "\t  \n\r";
      //String test = "This is \"only a\" frigging \t\"test\".";
      for (StringEnumeration se = new QuotesAndWhitespaceTokenizer(test); se.hasMoreStrings();)
	System.out.println(se.nextString());
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy