package postgresql.util; import java.sql.*; import java.util.*; /** * This class is used to tokenize the text output of postgres. * *

It's mainly used by the geometric classes, but is useful in parsing any * output from custom data types output from postgresql. * * @see postgresql.geometric.PGbox * @see postgresql.geometric.PGcircle * @see postgresql.geometric.PGlseg * @see postgresql.geometric.PGpath * @see postgresql.geometric.PGpoint * @see postgresql.geometric.PGpolygon */ public class PGtokenizer { // Our tokens protected Vector tokens; /** * Create a tokeniser. * *

We could have used StringTokenizer to do this, however, we needed to * handle nesting of '(' ')' '[' ']' '<' and '>' as these are used * by the geometric data types. * * @param string containing tokens * @param delim single character to split the tokens */ public PGtokenizer(String string,char delim) { tokenize(string,delim); } /** * This resets this tokenizer with a new string and/or delimiter. * * @param string containing tokens * @param delim single character to split the tokens */ public int tokenize(String string,char delim) { tokens = new Vector(); // nest holds how many levels we are in the current token. // if this is > 0 then we don't split a token when delim is matched. // // The Geometric datatypes use this, because often a type may have others // (usualls PGpoint) imbedded within a token. // // Peter 1998 Jan 6 - Added < and > to the nesting rules int nest=0,p,s; for(p=0,s=0;p') nest--; if(nest==0 && c==delim) { tokens.addElement(string.substring(s,p)); s=p+1; // +1 to skip the delimiter } } // Don't forget the last token ;-) if(s"); } /** * Removes < and > from the beginning and end of all tokens * @return String without the < or > */ public void removeAngle() { remove("<",">"); } }