java regex/arraylist问题,无法获取匹配/arraylist存储新值

标签 java android regex arraylist

刚刚进入java数组和正则表达式并尝试构建一个我以前在php中构建过的程序,我需要做的是我有一个来自twitter的数组列表,我想使用正则表达式来查找包含链接的文本,如果文本包含链接,我想将这些新值添加到我想显示的新数组中,但是最终数组返回空,这意味着在某些时候我的代码中的正则表达式不正确匹配,或者值没有传输过来到新数组,因为我是java新手,我无法发现哪里出了问题,任何帮助都将是巨大的,提前感谢。

protected void onPostExecute(ResponseList<twitter4j.Status> results) {
        // TODO Auto-generated method stub
        super.onPostExecute(results);
        ArrayList<twitter4j.Status> al = new ArrayList<twitter4j.Status>();

        for(twitter4j.Status statii: results){

            String patternStr = "^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
            Pattern pattern = Pattern.compile(patternStr);
            Matcher matcher = pattern.matcher(statii.getText());
            if(matcher.find() == true){
                al.add(statii); 
            }
        }

        StatusListAdapter adapter = new StatusListAdapter(
                TweepicsappActivity.this, al);
        setListAdapter(adapter);
    }

最佳答案

您的正则表达式中有一堆未转义的特殊字符(即 +. 等内容: | 对正则表达式解析器有意义,并且不匹配文字文本,除非您转义它们)。

就我个人而言,我总是转义正则表达式中的所有特殊字符,即使对于正则表达式解析器没有特殊含义的字符也是如此。在我看来,由于忘记转义而引起的问题可能太困惑而无法调试,因此值得冒险不转义某些东西。

所以我会这样做 patternStr 像:

String patternStr = "(https?|ftp|file)\\://[\\-a-zA-Z0-9\\+\\&\\@\\#/\\%\\?\\=\\~\\_\\|\\!\\:\\,\\.\\;]*[\\-a-zA-Z0-9\\+\\&\\@\\#/\\%\\=\\~\\_\\|]";

不是很漂亮,但它完成了工作。

这是一个示例:http://ideone.com/W8s3p

关于java regex/arraylist问题,无法获取匹配/arraylist存储新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9254888/

相关文章:

android - 想要计算 ListView 项目并在每个 ListView 项目上显示计数器

regex - 从文本文件中的重复范围模式中获取特定行

python - 在 Python 中使用正则表达式提取精确的单词或字符集

java - JPA 查询.getResultList()?

Android Proguard 跳过外部 jar

java - RESTEasy - @Path 需要完整路径吗?

android - 用Android中的 fragment 问题替换线性布局

匹配以下任何一项的正则表达式 - "a","p","am","pm"等

java - Hazelcast:具有多 CPU 机器的集群上的线程数

java - Java中如何真正关闭一个窗口?