2016-12-12 10 views
1

に空白を取り除く:私はArrayListの文字列表現を印刷するときが、私は以下のパターンルールを持つパターンルール

static List<String> fetchUrls(String tweet) { 
    List<String> url = new ArrayList<String>(); 
    Pattern p = Pattern.compile("(?:^|[\\W])((ht|f)tp(s?):\\/\\/|www\\.)" + "(([\\w\\-]+\\.){1,}?([\\w\\-.~]+\\/?)*" + "[\\p{Alnum}.,%_=?&#\\-+()\\[\\]\\*[email protected]!:/{};']*)"); 
    Matcher matcher = p.matcher(tweet); 

    while (matcher.find()) { 
     url.add(matcher.group()); // When an URL is detected, we add it to the Array List 
    } 

    return url; 
} 

しかし、私は最初のURLの前に空白を持っています。この空白をどうやって取り除くことができますか?

+2

のような不要なエスケープバックスラッシュとグループを取り除くことがあります正規表現を変更したくない場合は、値をトリム:url.add(。matcher.group())(トリム) – Nagaraddi

答えて

0

(?:^|[\W])\bに置き換えることができます。これは、文字列の先頭または単語以外の文字をその代替グループに一致させるためです。

次のサブパターンはhであるため、\bの前には、文字列の先頭の位置または単語以外の文字と完全に一致します。

あなたのパターンを使用して保存しておきたい場合は、それが

Pattern p = Pattern.compile("\\b((ht|f)tp(s?):\\/\\/|www\\.)" + "(([\\w\\-]+\\.){1,}?([\\w\\-.~]+\\/?)*" + "[\\p{Alnum}.,%_=?&#\\-+()\\[\\]\\*[email protected]!:/{};']*)"); 
           ^^^ 

ようになります、matcher.group()は非単語の文字を招くことなくURLを収集する必要があります。

あなたは

"\\b(?:(?:ht|f)tps?://|www\\.)" + 
"(?:(?:[\\w-]+\\.)+?(?:[\\w.~-]+/?)*" + 
"[\\p{Alnum}.,%_=?&#+()\\[\\]*[email protected]!:/{};'-]*)" 
関連する問題