我有这个字母:{' faa',' fa',' af'} 我有这个字符串:" faaf"
我有这个正则表达式:"(faa | fa | af)*"这有助于我将字符串与字母表匹配。
如何让我的字符串修剪为:{fa,af},这是写字符串的正确方法:" faaf"根据我的字母表?
这是我的代码:
String regex = "(faa|fa|af)*";
String str = "faaf";
boolean isMatch = Pattern.matches(regex, str);
if(isMatch)
{
//trim the string
while(str.length()!=0)
{
Pattern pattern = Pattern.compile("^(faa|fa|af)(faa|fa|af)*$");
Matcher mc = pattern.matcher(str);
if (mc.find())
{
String l =mc.group(1);
alphabet.add(l);
str = str.substring(l.length());
System.out.println("\n"+ l);
}
}
}
感谢Aaron帮我解决了这个问题。
答案 0 :(得分:0)
您需要循环。
Pattern pattern = Pattern.compile(regex + "*");
LinkedList<String> parts = new LinkedList<>();
while (!str.isEmpty()) {
Matcher m = pattern.matcher(str);
if (!m.matches()) { // In the first loop step.
break;
}
parts.addFirst(m.group(1)); // The last repetition matching group.
str = str.substring(0, m.start(1));
}
String result = parts.stream().collect(Collectors.joining(", ", "{", "}"));
这利用了匹配(X)+
将在m.group(1)
中产生最后出现的X值。
不幸的是,正则表达式模块没有提供无聊的matches
,例如重载replaceAll
且lambda处理单个MatchResult。
请注意,matches
适用于整个字符串。