java正则表达式取下一个值

时间:2013-05-24 17:06:00

标签: java regex

这是我的问题

我有这个字符串,我从webservice获得价值.....

“2000-07-01 14:29:12”,“2020-07-01 14:29:12”,“物业检查”,“maryam.com”,“Bakar”,“Maryam”,“ 915ae8fa7cdb44b3-1368080159272“,”05/21/2013 07:28:59“,”05/09/2013 06:15:59“,”物业检查“,”2“,”“,”“,”“,” ”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “2013年5月9日”, “”, “”, “”, “”, “”, “2013年5月9日”, “”, “假”, “假”,“假”, “假”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “假”, “”, “”, “假”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “” , “2013年5月9日”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “”, “2013年5月9日”, “”, “1.5678106,103.6354891”, “”, “” “”

目前我设法使用

拆分所有数据
StringTokenizer stringtokenizer = new StringTokenizer(gabung[rline], ",");

但我不希望字符串值从第1个字符串开始,直到第12个字符串

> "2000-07-01 14:29:12","2020-07-01 14:29:12",,"Property
> Inspection","maryam.com","Bakar","Maryam","915ae8fa7cdb44b3-1368080159272","05/21/2013
> 07:28:59","05/09/2013 06:15:59","Property Inspection","2",

但我希望在第12个字符串之后的下一个值..

我所做的是使用字符串拆分和拆分使用','和计数器..来计算它是否是第12个字符串

而不是使用计数器..你们有更好的解决方案吗?我不太了解正则表达式。

3 个答案:

答案 0 :(得分:1)

如果您只想要第12个值

使用split(非常简单,效率有点低,但可能不会太糟糕 - 除非我正在编写生产代码,否则我不会为此烦恼)

System.out.println(str.split(",")[12]);

使用indexOf(稍微复杂一些,效率更高)

int index = 0;
for (int i = 0; i < 12; i++)
   index = str.indexOf(',', index) + 1;
System.out.println(str.substring(index, str.indexOf(',', index)));

使用正则表达式:(可能比它的价值更复杂)

Pattern pattern = Pattern.compile("^(?:[^,]*,){12}([^,]*)");
Matcher matcher = pattern.matcher(str);
while (matcher.find())
    System.out.println(matcher.group(1));

如果你想要第12个值

的所有内容

使用indexOf

int index = 0;
for (int i = 0; i < 12; i++)
   index = str.indexOf(',', index) + 1;
System.out.println(str.substring(index));

使用正则表达式:

Pattern pattern = Pattern.compile("^(?:[^,]*,){12}(.*)");
Matcher matcher = pattern.matcher(str);
while (matcher.find())
    System.out.println(matcher.group(1));

Test

有关Java正则表达式的更多信息,请查看this page

答案 1 :(得分:0)

以下正则表达式将匹配带引号的字符串,后跟可选的逗号

 Pattern p = Pattern.compile("\"[^\"]*\",?");
 Matcher m = p.matcher(INPUT);
 int count = 0;
 while(m.find()) {
     System.out.println(INPUT.substring(m.start(), m.end());
 }

答案 2 :(得分:0)

如果每个字符串总共有94个,分隔..您可以使用此正则表达式拆分输入

,(?=(?:[^,]*,){82}[^,]*$)

所以

String[] output = inputString.split(aboveRegex);
output[1];//your required value

如果你确定前12个字符串,你可以匹配它与此正则表达式

(?:[^,]*,){12}(.*)$//group1 captures your required data