String re = "12,564,我是谁,324,665,"; 用java的正则表达式提取出指定的两个逗号之间的内容,请大家帮忙

比如第二个逗号之后,倒数第三个逗号之前的内容... 比如第二个逗号之后,倒数第三个逗号之前的内容 展开
 我来答
智商零
2014-06-04 · TA获得超过1558个赞
知道小有建树答主
回答量:513
采纳率:25%
帮助的人:189万
展开全部
 需要参数校验的话自己写吧~,文本数据量太大的话不建议用正则表达式

更多追问追答
追问
谢谢,那应该用什么啊,我这每条记录都有30多个字段,而且有100000条记录
追答

这个效率稍微能高一点点,但是都比split高,你可以测试下

百度网友b7ea76be85
2014-06-04 · 超过28用户采纳过TA的回答
知道答主
回答量:41
采纳率:0%
帮助的人:54.7万
展开全部
追求效率的话:
/**
* 返回第a个逗号和第b个逗号之间的内容
* 如果字符串长度为n,时间复杂度为O(n)
* @param a
* @param b
*/
public static String getStr(String s,int a,int b){
int start=-1;
int end=-1;
int pos=0;//第几个逗号
for(int i=0,l=s.length();i<l;i++){
if(s.charAt(i)==','){
pos++;
if(pos==a){
start=i;
}
if(pos==b){
end=i;
break;
}
}
}
if(start>-1&&end>start){
return s.substring(start+1, end);
}else{
return "";
}
}
//字符串底层就是个字符数组,charAt(i) 相当于随机访问字符数组的某个元素,效率高
//不建议用正则
追问
谢谢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
度娘的大爷haha
2014-06-04 · 知道合伙人软件行家
度娘的大爷haha
知道合伙人软件行家
采纳数:49 获赞数:304
好学好钻研,代码是一门艺术

向TA提问 私信TA
展开全部
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegTest {
public static void main(String[] args){
String reg="\\[\\u4e00-\\u9fa5]*\\]";
String s= "{\"internal_1\": [{\"version\": 4,\"addr\": \"192.160.1.11\"}]}";
//String reg="\\[[\\w\\u4e00-\\u9fa5]*\\]";
//String s= "12,564,我是谁,324,665,";
Pattern pattern =Pattern.compile(reg);
Matcher matcher =pattern.matcher(s);
List<String> list = new LinkedList<String>();
while(matcher.find()){
list.add(matcher.group());
}
java.lang.Object[] s2 = list.toArray();
for(java.lang.Object object : s2){
System.out.println(object);
}
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
monical2
2014-06-04 · TA获得超过772个赞
知道小有建树答主
回答量:730
采纳率:60%
帮助的人:389万
展开全部
package com.anonymity.test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestAnonymity {
    public static void main(String[] args) {
        String testStr = "12,564,我是谁,324,665,";
        System.out.println(getHandle(testStr, 1, 3));
    }

    private static Map<Integer, Integer> getIndexArray(String param) {

        Pattern p = Pattern.compile(",");
        Matcher m = p.matcher(param);
        Map<Integer, Integer> map = new HashMap<Integer, Integer>();
        for (int i = 1; m.find(); i++) {
            map.put(i, m.end());
        }
        return map;
    }

    private static String getHandle(String param, int beginIndex, int endIndex) {
        Map<Integer, Integer> map = getIndexArray(param);
        return param.substring(map.get(beginIndex), map.get(endIndex) - 1);
    }
}
更多追问追答
追问
谢谢,程序写的很规范啊,这个算法时间复杂度是多少啊,如果字段多了可以吗,菜鸟,多理解,呵呵
追答
并不是要很多的循环和逻辑操作.不必考虑时间复杂度的.字段多的可以用.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-06-04
展开全部
String re = "12,564,我是谁,324,665,";
String[] test1 = re.split(",");
for (int i = 0; i < test1.length; i++) {
if (i == 2) {
System.out.println(test1[i]);
}
}

试试吧!
追问
我用了这个方法,但如果字段很多的话,效率有点低,好的不需要的字段也分割了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小浩123123d55c828
2014-06-04 · TA获得超过790个赞
知道小有建树答主
回答量:694
采纳率:50%
帮助的人:386万
展开全部
不用正则可以吗
更多追问追答
追问
也可以啊,但得用java的方法,其他的看不懂啊
追答
int a = 2;//取第2个逗号之后的内容

String str = "12,564,我是谁,324,665,";
String[] strs = str.split(",");
System.out.println(strs[a]);

关于去空格,a的最大值的判断,你自己处理一下吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式