2014-02-23 169 views
0

具有I m具有一個字符串的多個條件的字符串如下拆分使用正則表達式

This is a test\nAnother test\n#art\n#paintings#collections 

偏離我所挑選的話 - 藝術,繪畫,集合。

我已經寫了一個java程序爲here。該代碼 -

String str = "This is a test\nAnother test\n#art\n#paintings#collections"; 


    String tag_name =""; 
    String[] sp = str.split(" |\n"); 
    for (int j =0; j<sp.length; j++) { 
     //System.out.println(""+sp[j]); 
     if (String.valueOf(sp[j].charAt(0)).equals("#")) {     
      tag_name = sp[j]; 
      String[] np = tag_name.split("#"); 
      for (int k = 0; k<np.length; k++) { 
       if(np[k].length() >0) { 
        tag_name = np[k].replaceAll("\n", ""); 
        System.out.println(""+ np[k]); 
       } 
      }     
      //System.out.println("" + tag_name); 
     } 
    } 

請建議我如何使用更強大的正則表達式代碼。

+0

目前還不清楚你問這裏。上面的代碼有什麼問題? –

+0

它分裂了兩次和兩次for循環。我想如果它可以減少。 –

回答

1

如果我理解你的要求,你想要找到所有關於#的文字。如果是這樣,這個工程:

import java.util.regex.Matcher; 
    import java.util.regex.Pattern; 
/** 
    <P>{@code java ArtTypesXmpl}</P> 
**/ 
public class ArtTypesXmpl { 
    public static final void main(String[] igno_red) { 
    String sToSearch = "This is a test\nAnother test\n#art\n#paintings#collections"; 

    Matcher mHashThenWord = Pattern.compile("#(\\w+)").matcher(sToSearch); 

    while(mHashThenWord.find()) { 
     System.out.println(mHashThenWord.group(1)); 
    } 
    } 
} 

輸出:

[C:\java_code\]java ArtTypesXmpl 
art 
paintings 
collections 

的JavaDoc上PatternMatcherhttp://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html

+0

這真的很酷。從來沒有在任何地方見過這一切的輝煌:) –

+0

我很高興它有幫助。祝你好運。 – aliteralmind

0

嘗試

String[] sp = str.split("\\s|\\n"); 

Here

十二個字符在正則表達式的特殊含義:反斜槓\,光標^,美元符號$,句點或點.,豎線或管道符號|,問號?,星號或星號*,加號+,左括號(,右括號),開口方括號[,以及開口大括號{。這些特殊字符通常稱爲元字符

+1

逃離這些角色並不是必需的,但至少要從中提取信息[http://www.regular-expressions.info/quickstart.html]。 – Boann