12ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller/* GENERATED SOURCE. DO NOT MODIFY. */ 22ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller/** 32ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller******************************************************************************* 4bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin* Copyright (C) 1996-2016, International Business Machines Corporation and * 52ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller* others. All Rights Reserved. * 62ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller******************************************************************************* 72ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller*/ 82ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 92ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerpackage android.icu.util; 102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport java.util.Enumeration; 122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport java.util.NoSuchElementException; 132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport android.icu.text.UTF16; 152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerimport android.icu.text.UnicodeSet; 162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller/** 181537b2f39245c07b00aa78c3600f7aebcb172490Neil Fuller * <strong>[icu enhancement]</strong> ICU's replacement for {@link java.util.Calendar}. Methods, fields, and other functionality specific to ICU are labeled '<strong>[icu]</strong>'. 192ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * 202ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>The string tokenizer class allows an application to break a string 212ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * into tokens by performing code point comparison. 222ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * The <code>StringTokenizer</code> methods do not distinguish 232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * among identifiers, numbers, and quoted strings, nor do they recognize 24bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * and skip comments. 252ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p> 262ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * The set of delimiters (the codepoints that separate tokens) may be 272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * specified either at creation time or on a per-token basis. 282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p> 292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * An instance of <code>StringTokenizer</code> behaves in one of three ways, 302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * depending on whether it was created with the <code>returnDelims</code> 312ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * and <code>coalesceDelims</code> 322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * flags having the value <code>true</code> or <code>false</code>: 332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <ul> 342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <li>If returnDelims is <code>false</code>, delimiter code points serve to 352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * separate tokens. A token is a maximal sequence of consecutive 362ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * code points that are not delimiters. 372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <li>If returnDelims is <code>true</code>, delimiter code points are 382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * themselves considered to be tokens. In this case, if coalesceDelims is 392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <code>true</code>, such tokens will be the maximal sequence of consecutive 402ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * code points that <em>are</em> delimiters. If coalesceDelims is false, 412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * a token will be received for each delimiter code point. 422ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * </ul> 432ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>A token is thus either one 442ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * delimiter code point, a maximal sequence of consecutive code points that 452ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * are delimiters, or a maximal sequence of consecutive code 462ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * points that are not delimiters. 472ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p> 482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * A <tt>StringTokenizer</tt> object internally maintains a current 492ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * position within the string to be tokenized. Some operations advance this 502ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * current position past the code point processed. 512ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p> 522ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * A token is returned by taking a substring of the string that was used to 532ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * create the <tt>StringTokenizer</tt> object. 542ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p> 552ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Example of the use of the default delimiter tokenizer. 562ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <blockquote><pre> 572ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * StringTokenizer st = new StringTokenizer("this is a test"); 582ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * while (st.hasMoreTokens()) { 592ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * println(st.nextToken()); 602ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * } 612ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * </pre></blockquote> 622ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p> 632ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * prints the following output: 642ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <blockquote><pre> 652ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * this 662ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * is 672ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * a 682ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * test 692ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * </pre></blockquote> 702ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p> 712ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Example of the use of the tokenizer with user specified delimiter. 722ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <blockquote><pre> 732ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * StringTokenizer st = new StringTokenizer( 742ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * "this is a test with supplementary characters \ud800\ud800\udc00\udc00", 752ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * " \ud800\udc00"); 762ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * while (st.hasMoreTokens()) { 772ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * println(st.nextToken()); 782ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * } 792ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * </pre></blockquote> 802ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p> 812ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * prints the following output: 822ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <blockquote><pre> 832ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * this 842ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * is 852ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * a 862ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * test 872ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * with 882ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * supplementary 892ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * characters 902ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * \ud800 912ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * \udc00 922ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * </pre></blockquote> 93bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * 942ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @author syn wee 95836e6b40a94ec3fb7545a76cb072960442b7eee9Neil Fuller * @hide Only a subset of ICU is exposed in Android 962ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 972ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fullerpublic final class StringTokenizer implements Enumeration<Object> 982ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller{ 992ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller // public constructors --------------------------------------------- 1002ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1012ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 1021537b2f39245c07b00aa78c3600f7aebcb172490Neil Fuller * <strong>[icu]</strong> Constructs a string tokenizer for the specified string. All 1032ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * characters in the delim argument are the delimiters for separating 1042ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * tokens. 1052ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>If the returnDelims flag is false, the delimiter characters are 106bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * skipped and only serve as separators between tokens. 1072ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>If the returnDelims flag is true, then the delimiter characters 1082ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * are also returned as tokens, one per delimiter. 1092ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param str a string to be parsed. 1102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param delim the delimiters. 1112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param returndelims flag indicating whether to return the delimiters 1122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * as tokens. 1132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @exception NullPointerException if str is null 1142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 1152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public StringTokenizer(String str, UnicodeSet delim, boolean returndelims) 1162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 1172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller this(str, delim, returndelims, false); 1182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1192ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1202ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 1211537b2f39245c07b00aa78c3600f7aebcb172490Neil Fuller * <strong>[icu]</strong> Constructs a string tokenizer for the specified string. All 1222ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * characters in the delim argument are the delimiters for separating 1232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * tokens. 1242ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>If the returnDelims flag is false, the delimiter characters are 125bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * skipped and only serve as separators between tokens. 1262ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>If the returnDelims flag is true, then the delimiter characters 1272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * are also returned as tokens. If coalescedelims is true, one token 1282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * is returned for each run of delimiter characters, otherwise one 1292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * token is returned per delimiter. Since surrogate pairs can be 130bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * delimiters, the returned token might be two chars in length. 1312ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param str a string to be parsed. 1322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param delim the delimiters. 1332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param returndelims flag indicating whether to return the delimiters 1342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * as tokens. 1352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param coalescedelims flag indicating whether to return a run of 1362ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * delimiters as a single token or as one token per delimiter. 1372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * This only takes effect if returndelims is true. 1382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @exception NullPointerException if str is null 1392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @deprecated This API is ICU internal only. 140836e6b40a94ec3fb7545a76cb072960442b7eee9Neil Fuller * @hide draft / provisional / internal are hidden on Android 1412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 1422ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller @Deprecated 1432ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public StringTokenizer(String str, UnicodeSet delim, boolean returndelims, boolean coalescedelims) 1442ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 1452ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_source_ = str; 1462ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_length_ = str.length(); 1472ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (delim == null) { 1482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_delimiters_ = EMPTY_DELIMITER_; 1492ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1502ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller else { 1512ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_delimiters_ = delim; 1522ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1532ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_returnDelimiters_ = returndelims; 1542ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_coalesceDelimiters_ = coalescedelims; 1552ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenOffset_ = -1; 1562ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenSize_ = -1; 1572ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_length_ == 0) { 1582ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller // string length 0, no tokens 1592ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = -1; 1602ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1612ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller else { 1622ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = 0; 1632ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (!returndelims) { 1642ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = getNextNonDelimiter(0); 1652ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1662ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1672ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1682ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1692ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 1701537b2f39245c07b00aa78c3600f7aebcb172490Neil Fuller * <strong>[icu]</strong> Constructs a string tokenizer for the specified string. The 1712ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * characters in the delim argument are the delimiters for separating 1722ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * tokens. 173bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * <p>Delimiter characters themselves will not be treated as tokens. 1742ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param str a string to be parsed. 1752ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param delim the delimiters. 1762ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @exception NullPointerException if str is null 1772ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 1782ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public StringTokenizer(String str, UnicodeSet delim) 1792ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 1802ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller this(str, delim, false, false); 1812ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 1822ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 1832ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 1842ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>Constructs a string tokenizer for the specified string. All 1852ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * characters in the delim argument are the delimiters for separating 186bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * tokens. 1872ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>If the returnDelims flag is false, the delimiter characters are 188bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * skipped and only serve as separators between tokens. 1892ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>If the returnDelims flag is true, then the delimiter characters 1902ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * are also returned as tokens, one per delimiter. 1912ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param str a string to be parsed. 1922ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param delim the delimiters. 1932ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param returndelims flag indicating whether to return the delimiters 1942ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * as tokens. 1952ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @exception NullPointerException if str is null 1962ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 1972ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public StringTokenizer(String str, String delim, boolean returndelims) 1982ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 1992ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller this(str, delim, returndelims, false); // java default behavior 2002ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2012ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 2022ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 2032ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>Constructs a string tokenizer for the specified string. All 2042ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * characters in the delim argument are the delimiters for separating 205bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * tokens. 2062ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>If the returnDelims flag is false, the delimiter characters are 207bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * skipped and only serve as separators between tokens. 2082ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>If the returnDelims flag is true, then the delimiter characters 2092ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * are also returned as tokens. If coalescedelims is true, one token 2102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * is returned for each run of delimiter characters, otherwise one 2112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * token is returned per delimiter. Since surrogate pairs can be 212bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * delimiters, the returned token might be two chars in length. 2132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param str a string to be parsed. 2142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param delim the delimiters. 2152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param returndelims flag indicating whether to return the delimiters 2162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * as tokens. 2172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param coalescedelims flag indicating whether to return a run of 2182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * delimiters as a single token or as one token per delimiter. 2192ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * This only takes effect if returndelims is true. 2202ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @exception NullPointerException if str is null 2212ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @deprecated This API is ICU internal only. 222836e6b40a94ec3fb7545a76cb072960442b7eee9Neil Fuller * @hide draft / provisional / internal are hidden on Android 2232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 2242ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller @Deprecated 2252ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public StringTokenizer(String str, String delim, boolean returndelims, boolean coalescedelims) 2262ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 2272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller // don't ignore whitespace 2282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_delimiters_ = EMPTY_DELIMITER_; 2292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (delim != null && delim.length() > 0) { 2302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_delimiters_ = new UnicodeSet(); 2312ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_delimiters_.addAll(delim); 2322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller checkDelimiters(); 2332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_coalesceDelimiters_ = coalescedelims; 2352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_source_ = str; 2362ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_length_ = str.length(); 2372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_returnDelimiters_ = returndelims; 2382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenOffset_ = -1; 2392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenSize_ = -1; 2402ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_length_ == 0) { 2412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller // string length 0, no tokens 2422ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = -1; 2432ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2442ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller else { 2452ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = 0; 2462ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (!returndelims) { 2472ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = getNextNonDelimiter(0); 2482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2492ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2502ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2512ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 2522ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 2532ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>Constructs a string tokenizer for the specified string. The 2542ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * characters in the delim argument are the delimiters for separating 255bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * tokens. 256bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * <p>Delimiter characters themselves will not be treated as tokens. 2572ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param str a string to be parsed. 2582ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param delim the delimiters. 2592ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @exception NullPointerException if str is null 2602ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 2612ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public StringTokenizer(String str, String delim) 2622ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 2632ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller // don't ignore whitespace 2642ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller this(str, delim, false, false); 2652ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2662ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 2672ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 2682ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <p>Constructs a string tokenizer for the specified string. 2692ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * The tokenizer uses the default delimiter set, which is 2702ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * " \t\n\r\f": 2712ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * the space character, the tab character, the newline character, the 272bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * carriage-return character, and the form-feed character. 273bfab1e7fec36dff93fb980c546ad64a565faf9fcPaul Duffin * <p>Delimiter characters themselves will not be treated as tokens. 2742ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param str a string to be parsed 2752ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @exception NullPointerException if str is null 2762ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 2772ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public StringTokenizer(String str) 2782ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 2792ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller this(str, DEFAULT_DELIMITERS_, false, false); 2802ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2812ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 2822ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller // public methods -------------------------------------------------- 2832ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 2842ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 2852ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Tests if there are more tokens available from this tokenizer's 2862ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * string. 2872ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * If this method returns <tt>true</tt>, then a subsequent call to 2882ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <tt>nextToken</tt> with no argument will successfully return a token. 2892ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @return <code>true</code> if and only if there is at least one token 2902ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * in the string after the current position; <code>false</code> 2912ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * otherwise. 2922ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 2932ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public boolean hasMoreTokens() 2942ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 2952ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return m_nextOffset_ >= 0; 2962ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 2972ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 2982ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 2992ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Returns the next token from this string tokenizer. 3002ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @return the next token from this string tokenizer. 3012ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @exception NoSuchElementException if there are no more tokens in 3022ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * this tokenizer's string. 3032ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 3042ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public String nextToken() 3052ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 3062ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_tokenOffset_ < 0) { 3072ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_nextOffset_ < 0) { 3082ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller throw new NoSuchElementException("No more tokens in String"); 3092ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller // pre-calculations of tokens not done 3112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_returnDelimiters_) { 3122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int tokenlimit = 0; 3132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int c = UTF16.charAt(m_source_, m_nextOffset_); 3142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller boolean contains = delims == null 3152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller ? m_delimiters_.contains(c) 3162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller : c < delims.length && delims[c]; 3172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (contains) { 3182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_coalesceDelimiters_) { 3192ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller tokenlimit = getNextNonDelimiter(m_nextOffset_); 3202ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } else { 3212ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller tokenlimit = m_nextOffset_ + UTF16.getCharCount(c); 3222ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (tokenlimit == m_length_) { 3232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller tokenlimit = -1; 3242ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3252ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3262ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller else { 3282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller tokenlimit = getNextDelimiter(m_nextOffset_); 3292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller String result; 3312ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (tokenlimit < 0) { 3322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller result = m_source_.substring(m_nextOffset_); 3332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller else { 3352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller result = m_source_.substring(m_nextOffset_, tokenlimit); 3362ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = tokenlimit; 3382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return result; 3392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3402ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller else { 3412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int tokenlimit = getNextDelimiter(m_nextOffset_); 3422ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller String result; 3432ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (tokenlimit < 0) { 3442ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller result = m_source_.substring(m_nextOffset_); 3452ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = tokenlimit; 3462ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3472ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller else { 3482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller result = m_source_.substring(m_nextOffset_, tokenlimit); 3492ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = getNextNonDelimiter(tokenlimit); 3502ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3512ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 3522ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return result; 3532ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3542ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3552ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller // count was called before and we have all the tokens 3562ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_tokenOffset_ >= m_tokenSize_) { 3572ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller throw new NoSuchElementException("No more tokens in String"); 3582ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3592ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller String result; 3602ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_tokenLimit_[m_tokenOffset_] >= 0) { 3612ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller result = m_source_.substring(m_tokenStart_[m_tokenOffset_], 3622ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenLimit_[m_tokenOffset_]); 3632ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3642ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller else { 3652ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller result = m_source_.substring(m_tokenStart_[m_tokenOffset_]); 3662ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3672ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenOffset_ ++; 3682ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = -1; 3692ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_tokenOffset_ < m_tokenSize_) { 3702ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = m_tokenStart_[m_tokenOffset_]; 3712ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3722ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return result; 3732ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3742ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 3752ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 3762ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Returns the next token in this string tokenizer's string. First, 3772ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * the set of characters considered to be delimiters by this 3782ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <tt>StringTokenizer</tt> object is changed to be the characters in 3792ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * the string <tt>delim</tt>. Then the next token in the string 3802ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * after the current position is returned. The current position is 3812ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * advanced beyond the recognized token. The new delimiter set 3822ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * remains the default after this call. 3832ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param delim the new delimiters. 3842ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @return the next token, after switching to the new delimiter set. 3852ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @exception NoSuchElementException if there are no more tokens in 3862ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * this tokenizer's string. 3872ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 3882ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public String nextToken(String delim) 3892ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 3902ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_delimiters_ = EMPTY_DELIMITER_; 3912ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (delim != null && delim.length() > 0) { 3922ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_delimiters_ = new UnicodeSet(); 3932ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_delimiters_.addAll(delim); 3942ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3952ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return nextToken(m_delimiters_); 3962ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 3972ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 3982ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 3991537b2f39245c07b00aa78c3600f7aebcb172490Neil Fuller * <strong>[icu]</strong> Returns the next token in this string tokenizer's string. First, 4002ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * the set of characters considered to be delimiters by this 4012ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <tt>StringTokenizer</tt> object is changed to be the characters in 4022ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * the string <tt>delim</tt>. Then the next token in the string 4032ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * after the current position is returned. The current position is 4042ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * advanced beyond the recognized token. The new delimiter set 4052ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * remains the default after this call. 4062ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param delim the new delimiters. 4072ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @return the next token, after switching to the new delimiter set. 4082ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @exception NoSuchElementException if there are no more tokens in 4092ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * this tokenizer's string. 4102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 4112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public String nextToken(UnicodeSet delim) 4122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 4132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_delimiters_ = delim; 4142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller checkDelimiters(); 4152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenOffset_ = -1; 4162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenSize_ = -1; 4172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (!m_returnDelimiters_) { 4182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = getNextNonDelimiter(m_nextOffset_); 4192ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 4202ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return nextToken(); 4212ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 4222ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 4232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 4242ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Returns the same value as the <code>hasMoreTokens</code> method. 4252ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * It exists so that this class can implement the 4262ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <code>Enumeration</code> interface. 4272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @return <code>true</code> if there are more tokens; 4282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <code>false</code> otherwise. 4292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @see #hasMoreTokens() 4302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 4312ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public boolean hasMoreElements() 4322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 4332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return hasMoreTokens(); 4342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 4352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 4362ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 4372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Returns the same value as the <code>nextToken</code> method, except 4382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * that its declared return value is <code>Object</code> rather than 4392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <code>String</code>. It exists so that this class can implement the 4402ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <code>Enumeration</code> interface. 4412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @return the next token in the string. 4422ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @exception NoSuchElementException if there are no more tokens in 4432ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * this tokenizer's string. 4442ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @see #nextToken() 4452ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 4462ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public Object nextElement() 4472ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 4482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return nextToken(); 4492ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 4502ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 4512ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 4522ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Calculates the number of times that this tokenizer's 4532ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * <code>nextToken</code> method can be called before it generates an 4542ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * exception. The current position is not advanced. 4552ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @return the number of tokens remaining in the string using the 4562ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * current delimiter set. 4572ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @see #nextToken() 4582ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 4592ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller public int countTokens() 4602ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 4612ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int result = 0; 4622ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (hasMoreTokens()) { 4632ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_tokenOffset_ >= 0) { 4642ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return m_tokenSize_ - m_tokenOffset_; 4652ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 4662ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_tokenStart_ == null) { 4672ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenStart_ = new int[TOKEN_SIZE_]; 4682ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenLimit_ = new int[TOKEN_SIZE_]; 4692ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 4702ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller do { 4712ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_tokenStart_.length == result) { 4722ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int temptokenindex[] = m_tokenStart_; 4732ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int temptokensize[] = m_tokenLimit_; 4742ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int originalsize = temptokenindex.length; 4752ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int newsize = originalsize + TOKEN_SIZE_; 4762ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenStart_ = new int[newsize]; 4772ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenLimit_ = new int[newsize]; 4782ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller System.arraycopy(temptokenindex, 0, m_tokenStart_, 0, 4792ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller originalsize); 4802ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller System.arraycopy(temptokensize, 0, m_tokenLimit_, 0, 4812ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller originalsize); 4822ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 4832ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenStart_[result] = m_nextOffset_; 4842ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_returnDelimiters_) { 4852ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int c = UTF16.charAt(m_source_, m_nextOffset_); 4862ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller boolean contains = delims == null 4872ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller ? m_delimiters_.contains(c) 4882ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller : c < delims.length && delims[c]; 4892ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (contains) { 4902ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_coalesceDelimiters_) { 4912ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenLimit_[result] = getNextNonDelimiter( 4922ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_); 4932ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } else { 4942ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int p = m_nextOffset_ + 1; 4952ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (p == m_length_) { 4962ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller p = -1; 4972ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 4982ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenLimit_[result] = p; 4992ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 5002ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 5012ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 5022ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller else { 5032ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenLimit_[result] = getNextDelimiter(m_nextOffset_); 5042ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 5052ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = m_tokenLimit_[result]; 5062ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 5072ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller else { 5082ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenLimit_[result] = getNextDelimiter(m_nextOffset_); 5092ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = getNextNonDelimiter(m_tokenLimit_[result]); 5102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 5112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller result ++; 5122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } while (m_nextOffset_ >= 0); 5132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenOffset_ = 0; 5142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_tokenSize_ = result; 5152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller m_nextOffset_ = m_tokenStart_[0]; 5162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 5172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return result; 5182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 5192ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 5202ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller // private data members ------------------------------------------------- 5212ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 5222ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 5232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Current offset to the token array. If the array token is not set up yet, 5242ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * this value is a -1 5252ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 5262ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private int m_tokenOffset_; 5272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 5282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Size of the token array. If the array token is not set up yet, 5292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * this value is a -1 5302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 5312ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private int m_tokenSize_; 5322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 5332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Array of pre-calculated tokens start indexes in source string terminated 5342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * by -1. 5352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * This is only set up during countTokens() and only stores the remaining 5362ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * tokens, not all tokens including parsed ones 5372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 5382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private int m_tokenStart_[]; 5392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 5402ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Array of pre-calculated tokens limit indexes in source string. 5412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * This is only set up during countTokens() and only stores the remaining 5422ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * tokens, not all tokens including parsed ones 5432ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 5442ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private int m_tokenLimit_[]; 5452ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 5462ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * UnicodeSet containing delimiters 5472ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 5482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private UnicodeSet m_delimiters_; 5492ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 5502ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * String to parse for tokens 5512ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 5522ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private String m_source_; 5532ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 5542ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Length of m_source_ 5552ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 5562ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private int m_length_; 5572ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 5582ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Current position in string to parse for tokens 5592ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 5602ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private int m_nextOffset_; 5612ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 5622ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Flag indicator if delimiters are to be treated as tokens too 5632ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 5642ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private boolean m_returnDelimiters_; 5652ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 5662ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 5672ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Flag indicating whether to coalesce runs of delimiters into single tokens 5682ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 5692ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private boolean m_coalesceDelimiters_; 5702ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 5712ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 5722ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Default set of delimiters \t\n\r\f 5732ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 5742ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private static final UnicodeSet DEFAULT_DELIMITERS_ 5752ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller = new UnicodeSet(0x09, 0x0a, 0x0c, 0x0d, 0x20, 0x20); // UnicodeSet("[ \t\n\r\f]", false) 5762ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 5772ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Array size increments 5782ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 5792ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private static final int TOKEN_SIZE_ = 100; 5802ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 5812ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * A empty delimiter UnicodeSet, used when user specified null delimiters 5822ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 5832ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private static final UnicodeSet EMPTY_DELIMITER_ = UnicodeSet.EMPTY; 5842ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 5852ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller // private methods ------------------------------------------------------ 5862ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 5872ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 5882ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Gets the index of the next delimiter after offset 5892ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param offset to the source string 5902ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @return offset of the immediate next delimiter, otherwise 5912ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * (- source string length - 1) if there 5922ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * are no more delimiters after m_nextOffset 5932ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 5942ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private int getNextDelimiter(int offset) 5952ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 5962ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (offset >= 0) { 5972ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int result = offset; 5982ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int c = 0; 5992ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (delims == null) { 6002ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller do { 6012ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller c = UTF16.charAt(m_source_, result); 6022ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_delimiters_.contains(c)) { 6032ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller break; 6042ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6052ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller result ++; 6062ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } while (result < m_length_); 6072ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } else { 6082ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller do { 6092ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller c = UTF16.charAt(m_source_, result); 6102ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (c < delims.length && delims[c]) { 6112ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller break; 6122ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6132ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller result ++; 6142ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } while (result < m_length_); 6152ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6162ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (result < m_length_) { 6172ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return result; 6182ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6192ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6202ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return -1 - m_length_; 6212ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6222ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 6232ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller /** 6242ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * Gets the index of the next non-delimiter after m_nextOffset_ 6252ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @param offset to the source string 6262ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * @return offset of the immediate next non-delimiter, otherwise 6272ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * (- source string length - 1) if there 6282ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller * are no more delimiters after m_nextOffset 6292ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller */ 6302ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private int getNextNonDelimiter(int offset) 6312ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller { 6322ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (offset >= 0) { 6332ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int result = offset; 6342ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int c = 0; 6352ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (delims == null) { 6362ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller do { 6372ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller c = UTF16.charAt(m_source_, result); 6382ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (!m_delimiters_.contains(c)) { 6392ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller break; 6402ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6412ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller result ++; 6422ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } while (result < m_length_); 6432ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } else { 6442ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller do { 6452ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller c = UTF16.charAt(m_source_, result); 6462ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (!(c < delims.length && delims[c])) { 6472ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller break; 6482ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6492ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller result ++; 6502ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } while (result < m_length_); 6512ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6522ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (result < m_length_) { 6532ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return result; 6542ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6552ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6562ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller return -1 - m_length_; 6572ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6582ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller 6592ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller void checkDelimiters() { 6602ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (m_delimiters_ == null || m_delimiters_.size() == 0) { 6612ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller delims = new boolean[0]; 6622ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } else { 6632ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller int maxChar = m_delimiters_.getRangeEnd(m_delimiters_.getRangeCount()-1); 6642ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller if (maxChar < 0x7f) { 6652ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller delims = new boolean[maxChar+1]; 6662ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller for (int i = 0, ch; -1 != (ch = m_delimiters_.charAt(i)); ++i) { 6672ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller delims[ch] = true; 6682ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6692ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } else { 6702ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller delims = null; 6712ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6722ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6732ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller } 6742ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller private boolean[] delims; 6752ae130017183d2f66d55bf0ca51f8da3294644fdNeil Fuller} 676