import java.net.*;
import java.io.*;
import java.util.*;

/**
 *  Provides a static 
 *
 *  @author http://bumble.sf.net
 */
 
  
public class TextTool extends Object
{
  //--------------------------------------------
  private static String NEWLINE = System.getProperty("line.separator");
  //--------------------------------------------
  private String text;  
  

  //--------------------------------------------
  public TextTool()
  {
    this.text = "";
  }

  //--------------------------------------------
  public TextTool(String sText)
  {
    this.text = sText;
  } 

  //--------------------------------------------
  public static String[] splitOnSpace(String sText)
  {
    String[] ssReturn;
    char cCurrent;
    StringBuffer sbSegment = new StringBuffer("");
    Vector vvSplit = new Vector();


    if (sText.trim().length() == 0)
    {
      return new String[0];
    }

    sText = sText.trim();
    for (int ii = 0; ii < sText.length(); ii++)
    {
      cCurrent = sText.charAt(ii);
      if (Character.isWhitespace(cCurrent))
      {
        if (!sbSegment.toString().trim().equals(""))
        {
          vvSplit.addElement(sbSegment.toString());
          sbSegment.setLength(0);
        }
      }
      else
      {
        sbSegment.append(cCurrent);
      }
    } //-- for

    if (!sbSegment.toString().trim().equals(""))
    {
      vvSplit.addElement(sbSegment.toString());
      sbSegment.setLength(0);
    }

    ssReturn = new String[vvSplit.size()];
    for (int ii = 0; ii < ssReturn.length; ii++)
    {
      ssReturn[ii] = (String)vvSplit.elementAt(ii);
    }

    return ssReturn;

  } //-- split on space

  //--------------------------------------------
  /** splits a string into two segments on the first
   *  non-leading space */
  public static String[] splitOnFirstSpace(String sText)
  {
    String[] ssReturn;
    char cCurrent;
    String sFirstSegment = "";
    String sSecondSegment = "";
    StringBuffer sbSegment = new StringBuffer("");

    if (sText.trim().length() == 0)
    {
      return new String[0];
    }

    sText = sText.trim();
    for (int ii = 0; ii < sText.length(); ii++)
    {
      cCurrent = sText.charAt(ii);
      if (Character.isWhitespace(cCurrent))
      {
        sFirstSegment = sbSegment.toString();
        sSecondSegment = sText.substring(ii).trim();
        ssReturn = new String[2];
        ssReturn[0] = sFirstSegment;
        ssReturn[1] = sSecondSegment;
        sbSegment.setLength(0);
        return ssReturn;

      }
      else
      {
        sbSegment.append(cCurrent);
      }
    } //-- for

    ssReturn = new String[1];
    ssReturn[0] = sText;
    return ssReturn;

  } //-- split on first space


  //--------------------------------------------
  public static boolean startsWith(String sText, String[] ssList)
  {
    for (int ii = 0; ii < ssList.length; ii++)
    {
      if (sText.startsWith(ssList[ii]))
      {
        return true;
      }
    }
    return false;
  }

  //--------------------------------------------
  public static boolean startsWithIgnoreCase(String sText, String[] ssList)
  {
    for (int ii = 0; ii < ssList.length; ii++)
    {
      if (sText.toLowerCase().startsWith(ssList[ii].toLowerCase()))
      {
        return true;
      }
    }
    return false;
  }

  //--------------------------------------------
  public static boolean endsWith(String sText, String[] ssList)
  {
    for (int ii = 0; ii < ssList.length; ii++)
    {
      if (sText.endsWith(ssList[ii]))
      {
        return true;
      }
    }
    return false;
  }

  //--------------------------------------------
  public static boolean endsWithIgnoreCase(String sText, String[] ssList)
  {
    for (int ii = 0; ii < ssList.length; ii++)
    {
      if (sText.toLowerCase().endsWith(ssList[ii].toLowerCase()))
      {
        return true;
      }
    }
    return false;
  }

  //--------------------------------------------
  /** a main method for testing */
  public static void main(String[] args) throws Exception
  {
    
    StringBuffer sbUsageMessage = new StringBuffer("");
    sbUsageMessage.append("test usage: java TextTool text");
    sbUsageMessage.append(NEWLINE);

    StringBuffer sbMessage = new StringBuffer("");


    if (args.length == 0)
    {	    
      System.out.println(sbUsageMessage);
      System.exit(-1);
    }

    String[] ssTest = {"why", "Here", "now", "NO"};
    String sCheck = args[0];
        
    System.out.println("Using list:");
    for (int ii = 0; ii < ssTest.length; ii++)
    {
      System.out.print(ssTest[ii] + ", ");
    }

    System.out.println("");
    System.out.println("Test String: " + sCheck);
                                         
    System.out.print(".startsWith()          >");
    System.out.println(TextTool.startsWith(sCheck, ssTest));
    System.out.print(".startsWithIgnoreCase()>");
    System.out.println(TextTool.startsWithIgnoreCase(sCheck, ssTest));
    System.out.print(".endsWith()            >");
    System.out.println(TextTool.endsWith(sCheck, ssTest));
    System.out.print(".endsWithIgnoreCase()  >");
    System.out.println(TextTool.endsWithIgnoreCase(sCheck, ssTest));
    System.out.println("TextTool.splitOnSpace()");

    String[] ssReturn;

    ssReturn = TextTool.splitOnSpace(sCheck);
    for (int ii = 0; ii < ssReturn.length; ii++)
    {
      System.out.println(ssReturn[ii]);
    }
    
    System.out.println("TextTool.splitOnFirstSpace()");

    ssReturn = TextTool.splitOnFirstSpace(sCheck);
    for (int ii = 0; ii < ssReturn.length; ii++)
    {
      System.out.println(ssReturn[ii]);
    }

 
  } //-- main()
  
} //-- TextTool class
