原始字符串:String src="1,2,3,4,5,6,7,8"
场景1:String自有的方法public String [] split(String regex)
应用:String [] target=src.split(",")
结果:target=["1","2","3","4","5","6","7","8"]
场景二:要求扩展String自有的split(String regex)
定义函数 public String [] splitString(String src,String regx,int num)
应用:String [] target = splitString(src,",",3);
结果:target =["1,2,3","4,5,6","7,8"] 我的思路是:先用String 自有的split方法分割,然后再重组成一个字符串数组,返回,但是感觉效率很低.请教大家有什么好的算法;
场景1:String自有的方法public String [] split(String regex)
应用:String [] target=src.split(",")
结果:target=["1","2","3","4","5","6","7","8"]
场景二:要求扩展String自有的split(String regex)
定义函数 public String [] splitString(String src,String regx,int num)
应用:String [] target = splitString(src,",",3);
结果:target =["1,2,3","4,5,6","7,8"] 我的思路是:先用String 自有的split方法分割,然后再重组成一个字符串数组,返回,但是感觉效率很低.请教大家有什么好的算法;
解决方案 »
- GUI基础问题····
- java控件替换出现控件不消失或重叠显现,求解
- 小菜鸟请教计算器问题
- 请大家推荐几个JAVA的编译器好吗,想在家里装一个学习,不知道在哪里下载。。谢谢~!坐等
- [求助]需要转换txt数据到mysql数据库,没思路,哪位大侠可以指条明路(欢迎砸帖)
- 谁去"上海天正信息科技有限公司"应聘过的,上来发点笔试、面试题目好吗?顶者有分,放100分 !!!
- 一道题
- 使用JTextField.setBorder(new SoftBevelBorder (SoftBevelBorder.LOWERED)),为何显示半个边框?
- 关于java图形界面编成的一个疑问?
- 一个小问题,来者有分,在线等待。
- ObjectOutputStream的writeObject是不是同步的?
- 如何去掉歌词前面的时间标志?
因为参数中有正则表达式啊
难道你要自己写一个正则表达式解析器??????
用String的split函数是不行的比如你传入的正则表达式是“[,.!?]”
你先用当然要用String的split函数分割后,就失去了具体的分隔符信息
再组合的时候,你使用句号组合呢,还是逗号组合呢,还是叹号啊?还是自己用正则表达式认真写吧
效率应该不会很差
public static String[] split(String src, String regex, int num) {
String[] temp = src.split(regex);
int redunt = temp.length % num;
int total = temp.length / num;
if (redunt != 0) {
total++;
}
String[] target = new String[total];
int count = 0;
for (int i = 0; i < temp.length;) {
StringBuffer sb = new StringBuffer();
if (i == temp.length - 1) {
sb.append(temp[i++]);
} else {
for (int j = 0; j < num; j++) {
if (j == num - 1) {
sb.append(temp[i++]);
} else {
sb.append(temp[i++]);
sb.append(regex);
}
}
}
target[count++] = sb.toString();
}
return target;
}
List<String> l = new ArrayList<String>();
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(src);
int beg = 0;
int count = 0;
while(m.find()) {
if(++count == num) {
l.add(src.substring(beg, m.start()));
beg = m.end();
count = 0 ;
}
}
if(count > 0) {
l.add(src.substring(beg));
}
return l.toArray(new String[0]);
}
楼主可以用这个代码片段测试一下这个程序: public static void main(String[] args) { String test = "aaa..bbb,,cccccc??ddd!!ee..ffff,,gg??hhhhh!!kk..llll,,mmm";
String[] result = splitString(test, "\\.\\.|,,|\\?\\?|!!", 4);
for(String s:result) {
System.out.println(s);
}
System.out.println("程序结束!!"); }
regex参数代表了正则表达式,而不是普通的一个标点符号
对正则表达式 我还不怎么会用,学习下.andycpp上面的代码好要处理一下边际数据
如String src="1,2,3,4,5,6,7,8"
如果指定num=3
则7,8丢失
split(src,",",2)
输出
1,2
3,4
5,6
7,89 没有掉啦
List<String> l = new ArrayList<String>();
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(src);
int beg = 0;
int count = 0;
while(m.find()) {
if(++count == num) {
l.add(src.substring(beg, m.start()));
beg = m.end();
count = 0 ;
}
}
if(beg<src.length())
l.add(src.substring(beg));
return l.toArray(new String[0]);
}