📄 stringtokenizer.java
字号:
package com.tianxia.qipai.model.util;
import java.util.Enumeration;
import java.util.NoSuchElementException;
public class StringTokenizer implements Enumeration
{ //字符串分割工具
private int currentPosition;
private int newPosition;
private int maxPosition;
private String str;
private String delimiters;
private boolean retDelims;
private boolean delimsChanged;
private char maxDelimChar;
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;
}
//为指定字符串构造一个 string tokenizer 对象。 在 delim 参数中的字符是分隔标记的分隔符
//如果 returnTokens 标志为 true, 则分隔符字符也被作为标记返回。每个分隔符作为长度为一的字符串返回。
//如果标志为 false, 则跳过分隔符字符,且把它作为标记之间的分隔符。
public StringTokenizer(String s, String s1, boolean flag)
{
currentPosition = 0;
newPosition = -1;
delimsChanged = false;
str = s;
maxPosition = s.length();
delimiters = s1;
retDelims = flag;
setMaxDelimChar();
}
//为指定字符串构造一个 string tokenizer 对象。 在 delim 参数中的字符是分隔标记的分隔符。
public StringTokenizer(String s, String s1)
{
this(s, s1, false);
}
//为指定字符串构造一个 string tokenizer 对象。 tokenizer 使用缺省的分隔符设置,
//它是 "\t\n\r":空格、制表符、换行符和回车。
public StringTokenizer(String s)
{
this(s, " \t\n\r\f", false);
}
//重新设置要分割的字符串
public void ResetString(String s){
currentPosition = 0;
newPosition = -1;
delimsChanged = false;
str = s;
maxPosition = s.length();
}
//
private int skipDelimiters(int i)
{
if(delimiters == null)
throw new 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;
}
//返回该 string tokenizer 的下一个标记的位置
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;
}
//测试该 tokenizer 的字符串是否还有其它可用的标记。
public boolean hasMoreTokens()
{
newPosition = skipDelimiters(currentPosition);
return newPosition < maxPosition;
}
//返回该 string tokenizer 的下一个标记。
public String nextToken()
{
currentPosition = newPosition < 0 || delimsChanged ? skipDelimiters(currentPosition) : newPosition;
delimsChanged = false;
newPosition = -1;
if(currentPosition >= maxPosition)
{
throw new NoSuchElementException();
} else
{
int i = currentPosition;
currentPosition = scanToken(currentPosition);
return str.substring(i, currentPosition);
}
}
//返回该 string tokenizer 的字符串的下一个标记。 在此调用之后,新的分隔符设置保持缺省。
public String nextToken(String s)
{
delimiters = s;
delimsChanged = true;
setMaxDelimChar();
return nextToken();
}
//该方法与 hasMoreTokens 方法返回同样的值。 它退出以便该类可以实现 Enumeration 接口。
public boolean hasMoreElements()
{
return hasMoreTokens();
}
//该方法与 nextToken 方法返回同样的值,除了它声明的返回值是 Object 而不是 String。
// 它存在以便该类可以实现 Enumeration 接口。
public 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;
}
public void setNull(){
str = null;
delimiters = null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -