jon*_*onc 5 java datetime string-matching
我想确定一个字符串是否是一个月的名称,我想要相对较快地完成它.目前卡在我脑中的功能如下:
boolean isaMonth( String str ) {
String[] months = DateFormatSymbols.getInstance().getMonths();
String[] shortMonths = DateFormatSymbols.getInstance().getShortMonths();
int i;
for( i = 0; i<months.length(); ++i;) {
if( months[i].equals(str) ) return true;
if( shortMonths[i].equals(str ) return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
但是,我将处理大量文本,一次传递一个字符串到这个函数,大多数时候我将遇到整个循环并返回false的最坏情况.
我看到另一个问题,谈到一个正则表达式匹配一个月的名字和一年可以适应这种情况.正则表达式会更快吗?还有其他解决方案可能更快吗?
为什么不将月份名称存储在 a 中HashSet?这将为您提供恒定时间查找,而不是从循环中获得的线性时间查找。
import java.util.HashSet;
import java.util.Collections;
import java.text.DateFormatSymbols;
class Test {
public static void main(String[] args) {
HashSet<String> months = new HashSet<String>(24);
Collections.addAll(months, DateFormatSymbols.getInstance().getMonths());
Collections.addAll(months, DateFormatSymbols.getInstance().getShortMonths());
System.out.println(months.contains(args[0]));
}
}
Run Code Online (Sandbox Code Playgroud)