mev-4.0.01/source/org/tigr/microarray/mev/file/StringSplitter.java

Code
Comments
Other
Rev Date Author Line
2 26 Feb 07 jari 1 package org.tigr.microarray.mev.file;
2 26 Feb 07 jari 2
2 26 Feb 07 jari 3 /*
2 26 Feb 07 jari 4 Copyright @ 1999-2003, The Institute for Genomic Research (TIGR).
2 26 Feb 07 jari 5 All rights reserved.
2 26 Feb 07 jari 6 */
2 26 Feb 07 jari 7 /*
2 26 Feb 07 jari 8  * $RCSfile: StringSplitter.java,v $
2 26 Feb 07 jari 9  * $Revision: 1.3 $
2 26 Feb 07 jari 10  * $Date: 2005/03/10 15:39:39 $
2 26 Feb 07 jari 11  * $Author: braistedj $
2 26 Feb 07 jari 12  * $State: Exp $
2 26 Feb 07 jari 13  */
2 26 Feb 07 jari 14
2 26 Feb 07 jari 15 import java.util.NoSuchElementException;
2 26 Feb 07 jari 16
2 26 Feb 07 jari 17 public class StringSplitter {
2 26 Feb 07 jari 18     
2 26 Feb 07 jari 19     private String str;
2 26 Feb 07 jari 20     private char delimiter;
2 26 Feb 07 jari 21     
2 26 Feb 07 jari 22     private int curPosition;
2 26 Feb 07 jari 23     private int maxPosition;
2 26 Feb 07 jari 24     
2 26 Feb 07 jari 25     /**
2 26 Feb 07 jari 26      * Constructs a <code>StringSplitter</code> with specified delimiter.
2 26 Feb 07 jari 27      */
2 26 Feb 07 jari 28     public StringSplitter(char delimiter) {
2 26 Feb 07 jari 29   init("", delimiter);
2 26 Feb 07 jari 30     }
2 26 Feb 07 jari 31     
2 26 Feb 07 jari 32     /**
2 26 Feb 07 jari 33      * Initializes this <code>StringSplitter</code> with a new data.
2 26 Feb 07 jari 34      */
2 26 Feb 07 jari 35     public void init(String str) {
2 26 Feb 07 jari 36   init(str, this.delimiter);
2 26 Feb 07 jari 37     }
2 26 Feb 07 jari 38     
2 26 Feb 07 jari 39     /**
2 26 Feb 07 jari 40      * Initializes this <code>StringSplitter</code> with a new data and delimeter.
2 26 Feb 07 jari 41      */
2 26 Feb 07 jari 42     private void init(String str, char delimiter) {
2 26 Feb 07 jari 43   this.str = str;
2 26 Feb 07 jari 44   this.delimiter = delimiter;
2 26 Feb 07 jari 45   curPosition = 0;
2 26 Feb 07 jari 46   maxPosition = str.length();
2 26 Feb 07 jari 47     }
2 26 Feb 07 jari 48     
2 26 Feb 07 jari 49     /**
2 26 Feb 07 jari 50      * Skips ahead from startPos and returns the index of the next delimiter
2 26 Feb 07 jari 51      * character encountered, or maxPosition if no such delimiter is found.
2 26 Feb 07 jari 52      */
2 26 Feb 07 jari 53     private int scanToken(int startPos) {
2 26 Feb 07 jari 54   int position = startPos;
2 26 Feb 07 jari 55   while (position < maxPosition) {
2 26 Feb 07 jari 56       char c = str.charAt(position);
2 26 Feb 07 jari 57       if (c == delimiter)
2 26 Feb 07 jari 58     break;
2 26 Feb 07 jari 59       position++;
2 26 Feb 07 jari 60   }
2 26 Feb 07 jari 61   return position;
2 26 Feb 07 jari 62     }
2 26 Feb 07 jari 63     
2 26 Feb 07 jari 64     /**
2 26 Feb 07 jari 65      * Tests if there are more tokens available from this tokenizer's string.
2 26 Feb 07 jari 66      * If this method returns <tt>true</tt>, then a subsequent call to
2 26 Feb 07 jari 67      * <tt>nextToken</tt> with no argument will successfully return a token.
2 26 Feb 07 jari 68      *
2 26 Feb 07 jari 69      * @return  <code>true</code> if and only if there is at least one token
2 26 Feb 07 jari 70      *          in the string after the current position; <code>false</code>
2 26 Feb 07 jari 71      *          otherwise.
2 26 Feb 07 jari 72      */
2 26 Feb 07 jari 73     public boolean hasMoreTokens() {
2 26 Feb 07 jari 74   return curPosition < maxPosition;
2 26 Feb 07 jari 75     }
2 26 Feb 07 jari 76     
2 26 Feb 07 jari 77     /**
2 26 Feb 07 jari 78      * Returns the next token from this string tokenizer.
2 26 Feb 07 jari 79      *
2 26 Feb 07 jari 80      * @return     the next token from this string tokenizer.
2 26 Feb 07 jari 81      * @exception  NoSuchElementException if there are no more tokens in this
2 26 Feb 07 jari 82      *             tokenizer's string.
2 26 Feb 07 jari 83      */
2 26 Feb 07 jari 84     public String nextToken() {
2 26 Feb 07 jari 85   if (curPosition >= maxPosition)
2 26 Feb 07 jari 86       throw new NoSuchElementException("There are no more tokens!");
2 26 Feb 07 jari 87   int start = curPosition;
2 26 Feb 07 jari 88   curPosition = scanToken(curPosition);
2 26 Feb 07 jari 89   String result = str.substring(start, curPosition);
2 26 Feb 07 jari 90   curPosition++;
2 26 Feb 07 jari 91   return result;
2 26 Feb 07 jari 92     }
2 26 Feb 07 jari 93     
2 26 Feb 07 jari 94     /**
2 26 Feb 07 jari 95      * Returns the number of tokens.
2 26 Feb 07 jari 96      */
2 26 Feb 07 jari 97     public int countTokens() {
2 26 Feb 07 jari 98   int count = 0;
2 26 Feb 07 jari 99   int pos = 0;
2 26 Feb 07 jari 100   while (pos < this.maxPosition) {
2 26 Feb 07 jari 101       if (str.charAt(pos) == this.delimiter)
2 26 Feb 07 jari 102     count++;
2 26 Feb 07 jari 103       pos++;
2 26 Feb 07 jari 104   }
2 26 Feb 07 jari 105   return count;
2 26 Feb 07 jari 106     }
2 26 Feb 07 jari 107     
2 26 Feb 07 jari 108     /**
2 26 Feb 07 jari 109      *  Passes the given count of tokens.
2 26 Feb 07 jari 110      */
2 26 Feb 07 jari 111     public final void passTokens(int count) {
2 26 Feb 07 jari 112   for (int i = count; --i >= 0;) {
2 26 Feb 07 jari 113       curPosition = scanToken(curPosition);
2 26 Feb 07 jari 114       curPosition++;
2 26 Feb 07 jari 115   }
2 26 Feb 07 jari 116     }
2 26 Feb 07 jari 117     
2 26 Feb 07 jari 118     /**
2 26 Feb 07 jari 119      * Returns the next token value as an integer.
2 26 Feb 07 jari 120      */
2 26 Feb 07 jari 121     public final int nextIntToken() {
2 26 Feb 07 jari 122   return nextIntToken(0);
2 26 Feb 07 jari 123     }
2 26 Feb 07 jari 124     
2 26 Feb 07 jari 125     /**
2 26 Feb 07 jari 126      * Returns the next token value as an integer with specifed default value.
2 26 Feb 07 jari 127      */
2 26 Feb 07 jari 128     public final int nextIntToken(int defValue) {
2 26 Feb 07 jari 129   String token = nextToken();
2 26 Feb 07 jari 130   try {
2 26 Feb 07 jari 131       return Integer.parseInt(token);
2 26 Feb 07 jari 132   } catch (NumberFormatException e) {
2 26 Feb 07 jari 133       return defValue;
2 26 Feb 07 jari 134   }
2 26 Feb 07 jari 135     }
2 26 Feb 07 jari 136     
2 26 Feb 07 jari 137     /**
2 26 Feb 07 jari 138      * Returns the next token value as a long.
2 26 Feb 07 jari 139      */
2 26 Feb 07 jari 140     public final long nextLongToken() {
2 26 Feb 07 jari 141   return nextLongToken(0);
2 26 Feb 07 jari 142     }
2 26 Feb 07 jari 143     
2 26 Feb 07 jari 144     /**
2 26 Feb 07 jari 145      * Returns the next token value as a double rounded to long.
2 26 Feb 07 jari 146      */
2 26 Feb 07 jari 147     public final long nextLongToken(boolean rounded) {
2 26 Feb 07 jari 148   return Math.round(nextDoubleToken(0));
2 26 Feb 07 jari 149     }
2 26 Feb 07 jari 150     
2 26 Feb 07 jari 151     /**
2 26 Feb 07 jari 152      * Returns the next token value as a long with specifed default value.
2 26 Feb 07 jari 153      */
2 26 Feb 07 jari 154     public final long nextLongToken(long defValue) {
2 26 Feb 07 jari 155   String token = nextToken();
2 26 Feb 07 jari 156   try {
2 26 Feb 07 jari 157       return Long.parseLong(token);
2 26 Feb 07 jari 158   } catch (NumberFormatException e) {
2 26 Feb 07 jari 159       return defValue;
2 26 Feb 07 jari 160   }
2 26 Feb 07 jari 161     }
2 26 Feb 07 jari 162     
2 26 Feb 07 jari 163     /**
2 26 Feb 07 jari 164      * Returns the next token value as a double with specifed default value.
2 26 Feb 07 jari 165      */
2 26 Feb 07 jari 166     public final double nextDoubleToken(double defValue) {
2 26 Feb 07 jari 167   String token = nextToken();
2 26 Feb 07 jari 168   try {
2 26 Feb 07 jari 169       return Double.parseDouble(token);
2 26 Feb 07 jari 170   } catch (NumberFormatException e) {
2 26 Feb 07 jari 171       return defValue;
2 26 Feb 07 jari 172   }
2 26 Feb 07 jari 173     }
2 26 Feb 07 jari 174     
2 26 Feb 07 jari 175     /**
2 26 Feb 07 jari 176      * Returns the next token value as a float with specifed default value.
2 26 Feb 07 jari 177      */
2 26 Feb 07 jari 178     public final float nextFloatToken(float defValue) {
2 26 Feb 07 jari 179   String token = nextToken();
2 26 Feb 07 jari 180   try {
2 26 Feb 07 jari 181       return Float.parseFloat(token);
2 26 Feb 07 jari 182   } catch (NumberFormatException e) {
2 26 Feb 07 jari 183       return defValue;
2 26 Feb 07 jari 184   }
2 26 Feb 07 jari 185     }
2 26 Feb 07 jari 186 }