刚刚进入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/