|
|
Splits delimited string into tokens.
The StringTokenizer takes a pointer to a string and a pointer to a string containing a number of possible delimiters. The StringTokenizer provides an input forward iterator which allows to iterate through all tokens. An iterator behaves like a logical pointer to the tokens, i.e. to shift to the next token, you've to increment the iterator, you get the token by dereferencing the iterator.
Memory consumption: This class operates on the original string and only allocates memory for the individual tokens actually requested, so this class allocates at maximum the space required for the longest token in the given string. Since for each iteration, memory is reclaimed for the last token, you MAY NOT store pointers to them; if you need them afterwards, copy them. You may not modify the original string while you operate on it with the StringTokenizer; the behaviour is undefined in that case.
The iterator has one special method 'nextDelimiter()' which returns a character containing the next delimiter following this tokenization process or '\0', if there are no following delimiters. In case of skipAllDelim, it returns the FIRST delimiter.
With the method 'setDelimiters(const char*)' you may change the set of delimiters. It affects all running iterators.
Example:
StringTokenizer st("mary had a little lamb;its fleece was..", " ;"); StringTokenizer::iterator i; for (i = st.begin() ; i != st.end() ; ++i) { cout << "Token: '" << *i << "'\t"; cout << " next Delim: '" << i.nextDelimiter() << "'" << endl; }
NoSuchElementException (class) |
Exception thrown, if someone tried to read beyond the end of the tokens. Will not happen if you use it the 'clean' way with comparison against end(), but if you skip some tokens, because you 'know' they are there. Simplifies error handling a lot, since you can just read your tokens the way you expect it, and if there is some error in the input this Exception will be thrown.