使用正则表达式拆分具有多个条件的字符串

时间:2014-02-23 17:07:04

标签: java regex

我的字符串如下

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

我从中挑选了一些文字 - 艺术,绘画,收藏品。

我为here编写了一个java程序。代码 -

  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);
        }
    }

请建议我如何使用更强大的正则表达式代码执行此操作。

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

尝试

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

来自Here

十二个字符在正则表达式中具有特殊含义:反斜杠\,插入符^,美元符号$,句点或点.,竖线或竖线符号|,问号?,星号或星号*,加号+,左括号(,右括号{ {1}},左方括号)和开口大括号[。这些特殊字符通常称为元字符