0

我有格式为的字符串:

;1=2011-10-23T16:16:53+0530;2=2011-10-23T16:16:53+0530;3=2011-10-23T16:16:53+0530;4=2011-10-23T16:16:53+0530;

我编写了以下代码来查找2011-10-23T16:16:53+0530字符串(;1=2011-10-23T16:16:53+0530;)

Pattern pattern = Pattern.compile("(;1+)=(\\w+);");

String strFound= "";
Matcher matcher = pattern.matcher(strindData);
while (matcher.find()) {
   strFound= matcher.group(2);
}

但它没有按预期工作。你能给我任何提示吗?

4

3 回答 3

4

你能给我任何提示吗?

是的。既不-是,也不是:,也不+是 的一部分\w

于 2012-02-05T14:05:29.427 回答
3

你必须使用正则表达式吗?为什么不调用String.split()以分号边界拆分字符串。然后再次调用它以通过等号分解块。此时,您将拥有一个整数和字符串形式的日期。从那里您可以解析日期字符串。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public final class DateScan {
    private static final String INPUT = ";1=2011-10-23T16:16:53+0530;2=2011-10-23T16:16:53+0530;3=2011-10-23T16:16:53+0530;4=2011-10-23T16:16:53+0530;";
    public static void main(final String... args) {
        final SimpleDateFormat parser = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
        final String[] pairs = INPUT.split(";");
        for (final String pair : pairs) {
            if ("".equals(pair)) {
                continue;
            }
            final String[] integerAndDate = pair.split("=");
            final Integer integer = Integer.parseInt(integerAndDate[0]);
            final String dateString = integerAndDate[1];
            try {
                final Date date = parser.parse(dateString);
                System.out.println(integer + " -> " + date);
            } catch (final ParseException pe) {
                System.err.println("bad date: " + dateString + ": " + pe);
            }
        }
    }
}
于 2012-02-05T14:27:05.593 回答
1

我已经稍微改变了输入,但只是出于演示的原因

你可以试试这个:

 String input = " ;1=2011-10-23T16:16:53+0530;   2=2011-10-23T16:17:53+0530;3=2011-10-23T16:18:53+0530;4=2011-10-23T16:19:53+0530;";

Pattern p = Pattern.compile("(;\\d+?)?=(.+?);");
Matcher m = p.matcher(input);

while(m.find()){
    System.out.println(m.group(2));
}
于 2012-02-05T14:36:51.407 回答