J2ME中的StringTokenizer
在se中用惯了的StringTokenizer,在me中没有了.怎么办呢,分割好的字符串是不得不解析的,老板交代的任务是要做的:).本来想自己土法上马做一个,可是"重新发明轮子",好像不是那么高明,先用google找了找,果然有高人已经实现了.代码在下面:
import java.util.*;
public class java/util/StringTokenizer.java.html" target="_blank">StringTokenizer implements java/util/Enumeration.java.html" target="_blank">Enumeration
{
private void setMaxDelimChar()
{
if(delimiters == null)
{
maxDelimChar = \0;
return;
}
char c = \0;
for(int i = 0; i < delimiters.length(); i++)
{
char c1 = delimiters.charAt(i);
if(c < c1)
c = c1;
}
maxDelimChar = c;
}
public java/util/StringTokenizer.java.html" target="_blank">StringTokenizer(java/lang/String.java.html" target="_blank">String s, java/lang/String.java.html" target="_blank">String s1, boolean flag)
{
currentPosition = 0;
newPosition = -1;
delimsChanged = false;
str = s;
maxPosition = s.length();
delimiters = s1;
retDelims = flag;
setMaxDelimChar();
}
public java/util/StringTokenizer.java.html" target="_blank">StringTokenizer(java/lang/String.java.html" target="_blank">String s, java/lang/String.java.html" target="_blank">String s1)
{
this(s, s1, false);
}
public java/util/StringTokenizer.java.html" target="_blank">StringTokenizer(java/lang/String.java.html" target="_blank">String s)
{
this(s, " \t\n\r\f", false);
}
private int skipDelimiters(int i)
{
if(delimiters == null)
throw new java/lang/NullPointerException.java.html" target="_blank">NullPointerException();
int j;
for(j = i; !retDelims && j < maxPosition; j++)
{
char c = str.charAt(j);
if(c > maxDelimChar || delimiters.indexOf(c) < 0)
break;
}
return j;
}
private int scanToken(int i)
{
int j;
for(j = i; j < maxPosition; j++)
{
char c = str.charAt(j);
if(c <= maxDelimChar && delimiters.indexOf(c) >= 0)
break;
}
if(retDelims && i == j)
{
char c1 = str.charAt(j);
if(c1 <= maxDelimChar && delimiters.indexOf(c1) >= 0)
j++;
}
return j;
}
public boolean hasMoreTokens()
{
newPosition = skipDelimiters(currentPosition);
return newPosition < maxPosition;
}
public java/lang/String.java.html" target="_blank">String nextToken()
{
currentPosition = newPosition < 0 || delimsChanged ? skipDelimiters(currentPosition) : newPosition;
delimsChanged = false;
newPosition = -1;
if(currentPosition >= maxPosition)
{
throw new java/util/NoSuchElementException.java.html" target="_blank">NoSuchElementException();
} else
{
int i = currentPosition;
currentPosition = scanToken(currentPosition);
return str.substring(i, currentPosition);
}
}
public java/lang/String.java.html" target="_blank">String nextToken(java/lang/String.java.html" target="_blank">String s)
{
delimiters = s;
delimsChanged = true;
setMaxDelimChar();
return nextToken();
}
public boolean hasMoreElements()
{
return hasMoreTokens();
}
public java/lang/Object.java.html" target="_blank">Object nextElement()
{
return nextToken();
}
public int countTokens()
{
int i = 0;
for(int j = currentPosition; j < maxPosition;)
{
j = skipDelimiters(j);
if(j >= maxPosition)
break;
j = scanToken(j);
i++;
}
return i;
}
private int currentPosition;
private int newPosition;
private int maxPosition;
private java/lang/String.java.html" target="_blank">String str;
private java/lang/String.java.html" target="_blank">String delimiters;
private boolean retDelims;
private boolean delimsChanged;
private char maxDelimChar;
}