String re = "12,564,我是谁,324,665,"; 用java的正则表达式提取出指定的两个逗号之间的内容,请大家帮忙
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) 相当于随机访问字符数组的某个元素,效率高
//不建议用正则
/**
* 返回第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) 相当于随机访问字符数组的某个元素,效率高
//不建议用正则
追问
谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
}
}
}
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);
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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]);
}
}
试试吧!
String[] test1 = re.split(",");
for (int i = 0; i < test1.length; i++) {
if (i == 2) {
System.out.println(test1[i]);
}
}
试试吧!
追问
我用了这个方法,但如果字段很多的话,效率有点低,好的不需要的字段也分割了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不用正则可以吗
更多追问追答
追问
也可以啊,但得用java的方法,其他的看不懂啊
追答
int a = 2;//取第2个逗号之后的内容
String str = "12,564,我是谁,324,665,";
String[] strs = str.split(",");
System.out.println(strs[a]);
关于去空格,a的最大值的判断,你自己处理一下吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询