假设一个应用程序使用一些已知的SimpleDateFormat
模式每秒解析数千个日期字符串。应用程序需要动态决定每个这样的日期模式是否都有一个时区,即日期模式字符串是否包含其中的任何位置和未加引号的字母Z
或X
,无论是大写还是小写(即总共4个符号)。
此类日期模式的示例如下:
Z
符号)Z
符号)x
符号)x
符号)这样做的一种方法是使用indexOf()
类的String
方法,但这意味着在每个日期模式上运行该方法4次(如果日期模式字符串被转换,则为2)事先判断为大写或小写),并检查时区符号是否被引用(在这种情况下,模式实际上没有时区)。
另一种选择是使用java正则表达式,比如
String date = ... // Get a SimpleDateFormat pattern
Pattern timezone = Pattern.compile("[^ZzXx]+[^'\"][ZzXx]{1}.*");
if (timezone.matcher(date).matches())
{
// The date pattern does have a timezone
}
上述正则表达式是否有更快的版本,即
"[^ZzXx]+[^'\"][ZzXx]{1}.*"
或通常用于检查SimpleDateFormat
模式是否包含时区符号的任何其他更快的方式?
答案 0 :(得分:1)
我建议尽可能简单:
String string = "...";
Pattern p = Pattern.compile("\\b(?<!')([xXzZ])(?!')\\b");
Matcher m = p.matcher(string);
if (m.find()) {
String timeZone = m.group(1);
}