是否有更快的方法将任意String与Java中的月份名称相匹配

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的最坏情况.

我看到另一个问题,谈到一个正则表达式匹配一个月的名字和一年可以适应这种情况.正则表达式会更快吗?还有其他解决方案可能更快吗?

dby*_*rne 3

为什么不将月份名称存储在 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)

  • “Collections.addAll(months, DateFormatSymbols.getInstance().getMonths())”怎么样? (2认同)