调用方法:
dispartString(a,new char[]{'-'}); //===============方法:dispartString(String)======================
/**
* 使用指定的分隔符将字符串分隔为字符串数组
* 本方法支持转义符,例如希望使用";"作为分隔符,
* 但是在字符串中某一处的“;”希望保留,不作分隔,在此“;”加上转义符即可。
* 在本方法中转义符是"~"。
* 如果待分隔的字符串的最后一个字符是分隔符,则结果字符串数组的最后补上一个空字符串
* 例如“2;1;”分隔成{"2","1",""}。(此处分隔符为“;”).
* @param sSourceString 待分隔的字符串
* @param separators 字符串的分隔符数组,如果值为null,则使用';'作为分隔符
* @return 分隔结果字符串数组
* @例如:sSourceString = "123;3247.34;dfj_rr",separator={';'}
* 则返回值为{"123","3247.34","dfj_rr"};
*/
//====================================================================
public static String[] dispartString(String sSourceString,char[] separators)
{
if(sSourceString==null)
{
return new String[0];
}
if(separators==null)
{
separators = new char[]{';'};
}
//缓冲区
StringBuffer sbTemp = new StringBuffer("");
//临时存放结果
java.util.Vector v = new java.util.Vector();
//以"~"为转义符
char charConv = '~';
//当前是否是转义符
boolean isConvChar = false;
int nSourceLength = sSourceString.length();
outerLoop:
for(int i=0;i<nSourceLength;i++)
{
innerLoop:
for(int j=0;j<separators.length;j++)
{
//当前字符是转义符,直接取下一个字符
if(!isConvChar&&sSourceString.charAt(i)==charConv)
{
isConvChar = true;
continue outerLoop;
}
//前面一个字符是转义符,直接将这个字符加入缓冲区,不再作是否分隔符判断
if(isConvChar)
{
sbTemp.append(sSourceString.charAt(i));
isConvChar = false;
continue outerLoop;
}
if(sSourceString.charAt(i)!=separators[j])
{
//与分隔符比较完毕,不是分隔符,将当前字符放入缓冲区
if(j==(separators.length-1))
{
sbTemp.append(sSourceString.charAt(i));
}
continue innerLoop;
}
else
{
//匹配成功,分离出一个单词
v.add(new String(sbTemp));
//清空缓冲区
sbTemp.delete(0,sbTemp.length());
continue outerLoop;
}
}
if(i==sSourceString.length()-1)
{
v.add(new String(sbTemp));
}
}
String[] strArrRet = new String[v.size()];
for(int i=0;i<strArrRet.length;i++)
{
strArrRet[i] = (String)v.get(i);
}
return strArrRet;
}
dispartString(a,new char[]{'-'}); //===============方法:dispartString(String)======================
/**
* 使用指定的分隔符将字符串分隔为字符串数组
* 本方法支持转义符,例如希望使用";"作为分隔符,
* 但是在字符串中某一处的“;”希望保留,不作分隔,在此“;”加上转义符即可。
* 在本方法中转义符是"~"。
* 如果待分隔的字符串的最后一个字符是分隔符,则结果字符串数组的最后补上一个空字符串
* 例如“2;1;”分隔成{"2","1",""}。(此处分隔符为“;”).
* @param sSourceString 待分隔的字符串
* @param separators 字符串的分隔符数组,如果值为null,则使用';'作为分隔符
* @return 分隔结果字符串数组
* @例如:sSourceString = "123;3247.34;dfj_rr",separator={';'}
* 则返回值为{"123","3247.34","dfj_rr"};
*/
//====================================================================
public static String[] dispartString(String sSourceString,char[] separators)
{
if(sSourceString==null)
{
return new String[0];
}
if(separators==null)
{
separators = new char[]{';'};
}
//缓冲区
StringBuffer sbTemp = new StringBuffer("");
//临时存放结果
java.util.Vector v = new java.util.Vector();
//以"~"为转义符
char charConv = '~';
//当前是否是转义符
boolean isConvChar = false;
int nSourceLength = sSourceString.length();
outerLoop:
for(int i=0;i<nSourceLength;i++)
{
innerLoop:
for(int j=0;j<separators.length;j++)
{
//当前字符是转义符,直接取下一个字符
if(!isConvChar&&sSourceString.charAt(i)==charConv)
{
isConvChar = true;
continue outerLoop;
}
//前面一个字符是转义符,直接将这个字符加入缓冲区,不再作是否分隔符判断
if(isConvChar)
{
sbTemp.append(sSourceString.charAt(i));
isConvChar = false;
continue outerLoop;
}
if(sSourceString.charAt(i)!=separators[j])
{
//与分隔符比较完毕,不是分隔符,将当前字符放入缓冲区
if(j==(separators.length-1))
{
sbTemp.append(sSourceString.charAt(i));
}
continue innerLoop;
}
else
{
//匹配成功,分离出一个单词
v.add(new String(sbTemp));
//清空缓冲区
sbTemp.delete(0,sbTemp.length());
continue outerLoop;
}
}
if(i==sSourceString.length()-1)
{
v.add(new String(sbTemp));
}
}
String[] strArrRet = new String[v.size()];
for(int i=0;i<strArrRet.length;i++)
{
strArrRet[i] = (String)v.get(i);
}
return strArrRet;
}
解决方案 »
- 求助!一个小程序
- 初学java,想知道怎么用hasNextInt限制输入为数字
- 安装完myeclipse后,发现没有执行文件,这是怎么回事?
- 关于java反编译
- 为什么我连接ORACLE数据库总是报错?
- 请问JTextArea能存放多少内容?如何保证JTextArea不出现内存溢出?
- 反射技术的光芒好强 求解决方法
- 关于JDK的问题
- 进来就给分,很容易回答的。
- 关于socket-用一个循环不断发送请求,达到一定次数之后就会报错
- javax.servlet.http 包存于jdk中哪个jar文件?
- JLabel(String text, int horizontalAlignment)中的参数???
int j=0;
while(i<a.length())
{
if(a.substring(i, i+1).equals("-"))
b[j++]=a.substring(i-2, i);
if(i==a.length()-1)
b[j]=a.substring(i-1, i+1);
}
public boolean fbSplit(String psString, String psdelim)
{
int i = 0;
StringTokenizer stkTemp = new StringTokenizer(psString, psdelim);
String strTemp;while(stkTemp.hasMoreTokens())
{
strTemp = stkTemp.nextToken();
vStrArray.add(i, strTemp);
i = i + 1;
}你看看吧,应该可以的。
如果a="aa"一开始就不对
a=a+"-";
String[] b;
int n = a.length();
int x =n/3;
b = new String [x];
for (int m=0;m<x;m++)
{
b[m]=a.substring(0,2);
a=a.substring(a.indexOf("-")+1,a.length());
System.out.println(b[m]);
}
看不懂,解释一下,谢谢
try again.int i=0;
int j=0;
while(i<a.length())
{
if(a.substring(i, i+1).equals("-"))
b[j++]=a.substring(i-2, i);
if(i==a.length()-1)
b[j]=a.substring(i-1, i+1);i++;}
你直接用好了。
比如字符串“aa-bb-cc-dd-ee....”
那只要
vStrArray=new Vector();
b=fbSplit(字符串,"分隔符");//你用的话这里是“-”号
然后
strTemp=(String)vStrArray.elementAt(i);//取第几个,如果全取就夹在循环里。
vStrArray里面就是aabbccdd.....这些变量的定义和初始化你自己写吧
可能说得不清楚,不过可以用的
<%!
Vector vStrArray;
int i;
boolean bRet;
String strTemp;
String strMyString;public boolean fbSplit(String psString, String psdelim)
{
int i = 0;
StringTokenizer stkTemp = new StringTokenizer(psString, psdelim);
String strTemp;while(stkTemp.hasMoreTokens())
{
strTemp = stkTemp.nextToken();
vStrArray.add(i, strTemp);
i = i + 1;
}return true;
}
%>