样本数据
A B C BHD
P 1 QPH 1 P
P 2 * PH 2 P
P 3 * PH ZP ZP 3 P
P 4 QPH QPH QP 4 P
5 * H * H * 5
6 * H * H * 6
7 * H * H * 7
8 Z H Z H Z 8
9 * H * H * 9
10 * H * H * 10
W11 * UH * UH * U 11W
我正在尝试在其中提取带有“* H”的第一行(例如第5行),但没有得到任何结果 这是我到目前为止所尝试的
String result = sample Data
Pattern l =Pattern.compile(^ ([A-Z}|//s)? ?([0-9]{1,2}) (\\*) [H] .*)
Matcher m =l.matcher(result);
If(m.find()){
System.out.println( “The Row number is: “ m.group(2));
}
答案 0 :(得分:0)
根据我的理解,您希望逐行扫描String
并找到包含* H
的第一行,然后返回其编号。
此模式为\\*\\s+H
,您只需找到包含该模式的行:
public static int findStartH(final String input) {
final Pattern pattern = Pattern.compile("\\*\\s+H");
final Scanner scanner = new Scanner(input);
for (int i = 1; scanner.hasNextLine(); ++i) {
final String line = scanner.nextLine();
if (pattern.matcher(line).find()) {
return i;
}
}
throw new IllegalArgumentException("Input does not contain required string.");
}
快速测试案例:
public static void main(final String[] args) throws Exception {
final String input = "Sample Data A B C\n"
+ "BHD\n"
+ "P 1 QPH 1 P\n"
+ "P 2 *PH 2 P\n"
+ "P 3 *PH ZP ZP 3 P\n"
+ "P 4 QPH QPH QP 4 P\n"
+ "5 * H * H * 5\n"
+ "6 * H * H * 6\n"
+ "7 * H * H * 7\n"
+ "8 Z H Z H Z 8\n"
+ "9 * H * H * 9\n"
+ "10 * H * H * 10\n"
+ "W11 *UH *UH *U 11W";
System.out.println(findStarH(input));
}
输出:
7