这里我有下面的代码。这个想法是有一个像"R#GUPW*UIOPW#WERTY*RT#LLOPPPPER*CVW"这样的短语来返回一个像

"#GUPW*"
"#WERTY*"
"#LLOPPPPER*"

这将返回短语中所有以#开头并以*结束的子字符串。所以这句话有3个

import java.io.*;

public class Pattern {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here

        String phrase = "R#GUPW*UIOPW#WERTY*RT#LLOPPPPER*CVW";
        String found ="";

        for (int y = 0; y<phrase.length(); y++)
        {
        found = found + phrase.substring(phrase.indexOf("#"), phrase.indexOf("*"));
        }
        System.out.println(found);
    }

}


但是我的代码返回
"#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW#GUPW"

如何从我的短语中返回这些以#开头和*结束的子字符串。

"#GUPW*"
"#WERTY*"
"#LLOPPPPER*"

最佳答案

解决方案是定义一个Pattern,然后在Matcher中使用它。

List<String> allMatches = new ArrayList<String>();
Pattern p = Pattern.compile("#[^*]+\\*");
Matcher m = p.matcher(yourString);
while (m.find()) {
   allMatches.add(m.group());
 }


然后,所有匹配项将出现在List中。

演示:

String s = "R#GUPW*UIOPW#WERTY*RT#LLOPPPPER*CVW";
List<String> allMatches = new ArrayList<String>();
Pattern p = Pattern.compile("#[^*]+\\*");
Matcher m = p.matcher(s);
while (m.find()) {
    allMatches.add(m.group());
}

for (String str : allMatches) {
    System.out.println(str);
}
>>#GUPW*
>>#WERTY*
>>#LLOPPPPER*

10-08 20:04