这里我有下面的代码。这个想法是有一个像"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*