将字符串分隔成单词(指定多个分隔符)
将字符串分隔成单词(指定多个分隔符)
public class CommandTokenizer implements java.util.Enumeration
{
private int currentPosition;
private int newPosition;
private int maxPosition;
private String str;
private String delimiters[] = {" ","\r","\n","\t"};
private boolean retDelims;
private boolean delimsChanged;
private int currentDelims = -1;
private char maxDelimChar;
public CommandTokenizer(String str, String delim[], boolean returnDelims)
{
currentPosition = 0;
newPosition = -1;
delimsChanged = false;
this.str = str;
maxPosition = str.length();
delimiters = delim;
retDelims = returnDelims;
}
public CommandTokenizer(String str, String delim[])
{
this(str, delim, false);
}
public CommandTokenizer(String str)
{
currentPosition = 0;
newPosition = -1;
delimsChanged = false;
this.str = str;
maxPosition = str.length();
retDelims = false;
}
private boolean matchDelims(int position,String s_delim)
{
if (s_delim == null)
throw new NullPointerException();
boolean matched=true;
if (position + s_delim.length()>=maxPosition)
{
return false;
}
if (position+s_delim.length() > maxPosition) return false;
for (int i=0;i
if (str.charAt(position+i) != s_delim.charAt(i))
{
matched = false;
break;
}
}
return matched;
}
private boolean matchDelims(int position)
{
if (delimiters == null || delimiters.length==0)
throw new NullPointerException();
currentDelims = -1;
boolean matched=false;
for(int i=0;i
matched = matchDelims(position,delimiters[i]);
if (matched)
{
currentDelims = i;
break;
}
}
return matched;
}
private int skipDelimiters(int startPos)
{
int position = startPos;
while (!retDelims && position < maxPosition) {
if (matchDelims(position))
{
position = position + delimiters[currentDelims].length();
break;
}
position++;
}
return position ;
}
private int scanToken(int startPos)
{
int position = startPos;
while (position < maxPosition)
{
if (matchDelims(position))
{
break;
}
position++;
}
if (retDelims && (startPos == position))
{
if (matchDelims(position))
position = position + delimiters[currentDelims].length();
}
return position;
}
public boolean hasMoreTokens()
{
newPosition = skipDelimiters(currentPosition);
return (newPosition < maxPosition);
}
public String nextToken()
{
currentPosition = (newPosition >= 0 && !delimsChanged) ?
newPosition : skipDelimiters(currentPosition);
delimsChanged = false;
newPosition = -1;
if (currentPosition >= maxPosition)
throw new java.util.NoSuchElementException();
int start = currentPosition;
currentPosition = scanToken(currentPosition);
return str.substring(start, currentPosition);
}
public String nextToken(String delim[])
{
delimiters = delim;
delimsChanged = true;
return nextToken();
}
public boolean hasMoreElements()
{
return hasMoreTokens();
}
public Object nextElement()
{
return nextToken();
}
public int countTokens()
{
int count = 0;
int currpos = currentPosition;
while (currpos < maxPosition) {
currpos = skipDelimiters(currpos);
if (currpos >= maxPosition)
break;
currpos = scanToken(currpos);
count++;
}
return count;
}
}