如何获得两个字符之间的所有子串?

时间:2013-11-24 05:14:45

标签: java regex string

如果我想沿着一个字符串拉两个字符(一般)之间的所有子串,我该怎么做? 我也希望保留第一个匹配的字符,但不保留第二个字符。

所以,例如,如果我想要将字符保留在# char和下一个空格之间或另一个char的下一个字符(在这种情况下再次#,但可以是任何东西)和我有一个字符串,说:"hello i'm #chilling#likeAVillain but like #forreal"

我如何得到,比如一组[#chilling, #likeAVillain, #forreal]

我遇到了困难,因为这两个/或者是子字符串的情况 - 我希望子字符串以#开头,并在第一次出现另一个#或空格(或结束)之前结束字符串,如果没有找到这些字符串)

在sudocode中最简单:

for every String W between [char A, either (char B || char C)) // notice [A,B) - want the 
                                                               //first to be inclusive
   Set.add(W);

2 个答案:

答案 0 :(得分:3)

这个正则表达式#\\w+似乎可以满足您的需求。它会在其后面找到#和所有字母数字字符。由于空格不属于\\w,因此不会包含在您的匹配中。

String s = "hello i'm #chilling#likeAVillain but like #forreal";
Pattern p = Pattern.compile("#\\w+");
Matcher m = p.matcher(s);
while (m.find())
    System.out.println(m.group());

输出:

#chilling
#likeAVillain
#forreal

答案 1 :(得分:0)

public static void main(String[] args) throws Exception{

    String s1 = "hello i'm #chilling#likeAVillain but like #forreal";
    String[] strArr = s1.split("\\#");
    List<String> strOutputArr = new ArrayList<String>();
    int i = 0;
    for(String str: strArray){

        if(i>0){
            strOutputArray.add("#" + str.split("\\s+")[0]);
        }
        i++;
    }
    System.out.println(strOutputArray.toString());

    }