Java正则表达式匹配器无法正常工作

时间:2014-03-15 10:27:57

标签: java regex matcher

我试图获得模式和匹配器的悬念。此方法应使用正则表达式模式迭代状态大写数组并返回与模式对应的状态。当我检查像" tallahassee"或者"盐湖城"但不是像" ^ t"什么是我没有得到的?

这是调用它的方法和主要方法:

public ArrayList<String> getState(String s) throws RemoteException 
{
    Pattern pattern = Pattern.compile(s);
    Matcher matcher; 
    int i=0;
    System.out.println(s);
    for(String ct:capitalValues)
    {
        matcher = pattern.matcher(ct);
        if(ct.toLowerCase().matches(s))
            states.add(stateValues[i]);
        i++;    
    }
    return states;
}

public static void main (String[] args) throws RemoteException
{
    ArrayList<String> result = new ArrayList<String>();
    hashTester ht = new hashTester();

    result = ht.getState(("^t").toLowerCase());
    System.out.println("result: ");
    for(String s:result)
        System.out.println(s);


}

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

您甚至没有使用matcher进行匹配。您正在使用String#matches()方法。该方法和Matcher#matches()方法都匹配完整字符串的正则表达式,而不是它的一部分。所以你的正则表达式应该覆盖整个字符串。如果您只想与字符串的一部分匹配,请使用Matcher#find()方法。

您应该像这样使用它:

if(matcher.find(ct.toLowerCase())) {
    // Found regex pattern
}

顺便说一句,如果你只是想看一个字符串是否以t开头,你可以直接使用String#startsWith()方法。对于那种情况,不需要正则表达式。但我想这是一个普遍的例子。

答案 1 :(得分:0)

^是正则表达式中的anchor字符。如果你不想锚定,你必须逃脱它。否则^t将字符串开头的t。使用\\^t

进行转义
相关问题