这是一个算法问题。
我有一个Java列表(已排序)或由字符(X和Y)组成的数组,我需要检测值的排序方式。
列表大小是固定的(例如5)。我想要检测的模式如下:
XYYYY
XXYYY
XXXYY
XXXXY
XXXXX
所以X总是只跟着Y&#39>。
简单的String.equals或contains不起作用,因为它不可扩展,并且仅限于已知的列表大小。
答案 0 :(得分:0)
您可以使用简单的正则表达式:
boolean matches = s.matches("^X+Y*$");
这意味着:
^
匹配字符串的开头X+
表示一个或多个连续X
s Y*
表示零个或多个连续Y
s $
是字符串的结尾或者,您可以按字符顺序检查字符串:
int i = 0;
while (i < s.length() && s.charAt(i) == 'X') {
++i;
}
if (i < s.length()) {
if (s.charAt(i) != 'Y') {
return false;
}
while (i < s.length() && s.charAt(i) == 'Y') {
++i;
}
}
return i == s.length();
答案 1 :(得分:0)
您可以使用以下正则表达式来检测特定模式。
String pattern = "^(X){1,}Y*$";
这是完整的Java代码,
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PatternMatch {
public static void main(String[] args){
// String to be scanned to find the pattern.
String line = "XXXXY";
String pattern = "^(X){1,}Y*$";
// Create a Pattern object
Pattern r = Pattern.compile(pattern);
// Now create matcher object.
Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
} else {
System.out.println("NO MATCH");
}
}
}