Java “匹配年份”;2XXX“;在CSV文件中

Java “匹配年份”;2XXX“;在CSV文件中,java,regex,csv,Java,Regex,Csv,下面是我试图使用regex或string.split(“,”)解析的CSV文件中的一行示例,我想提取年份(在下面的示例中,2013)。但问题是:年份列索引并不总是17,也可能是19。我正在考虑在string.split(“,”数组中遍历每个字符串,并将模式与“2XXX”匹配 9344949,HW488429,10/09/2013 05:00:00,039XX西门罗 ST,0610,入室盗窃,强行 入境,居留,假,假,1122011,28,26,0511499551899326,**2013**,

下面是我试图使用regex或
string.split(“,”
)解析的CSV文件中的一行示例,我想提取年份(在下面的示例中,2013)。但问题是:年份列索引并不总是17,也可能是19。我正在考虑在
string.split(“,”
数组中遍历每个字符串,并将模式与
“2XXX”
匹配

9344949,HW488429,10/09/2013 05:00:00,039XX西门罗 ST,0610,入室盗窃,强行 入境,居留,假,假,1122011,28,26,0511499551899326,**2013**,2013年10月16日 上午12:39:00,41.87966141386545,-87.72485045373,“(41.87966141386545, -87.72485045373“

这可以分解CSV文件中的每一行

Pattern.compile("^([^,]+,){2}\\d{2}/\\d{2}/(\\d{4})([^,]+,){3}([^,]+)");
但是我需要一些帮助来匹配每个字符串与
2XXX
。我试过这个:
Pattern patt=Pattern.compile(“^2\d{3}”);但是,我的eclipse报告了这方面的错误。

首先,我强烈建议您尝试使用Boris建议的CSV解析器

如果你必须按自己的方式做,你可以做类似的事情

String year;
String str = // your csv line
String[] strArr = str.split(",");
for(String s : strArr)
{
    if(s.trim().matches("2\\d{3}"))
    {
        year = s;
        break;
    }
} 

请尽量减少这个问题-我认为人们很难在心里解析你在这里写的所有内容。我会使用真正的CSV解析器。可能有转义分隔符。引用。转义引号。CSV解析器可以处理而您的代码无法处理的各种奇怪的事情。虽然这在正则表达式中是可行的,但它并不漂亮,所以我建议在这种情况下避免使用它。