я нашел разницу, но я не могу это объяснить:Компиляция шаблона. *? . * Против
public static void main(String[] args) {
Pattern p = Pattern.compile("[+-]?\\d+.*?");
Matcher m = p.matcher("+5.0h");
System.out.println(m.matches()); //prints true
Scanner in = new Scanner("+5.0h");
while (in.hasNext()) {
if (in.hasNext(p)) {
System.out.println(in.findInLine(p)); //prints +5
}
}
in.close();
System.out.println("6.0hgf".matches("[+-]?\\d+.*?")); //prints nothing,it seemed that this sentence didn't execute,why this happened?
}
, когда я изменил
Pattern p = Pattern.compile("[+-]?\\d+.*?")
в
Pattern p = Pattern.compile("[+-]?\\d+.*")
произошло следующее:
public static void main(String[] args) {
Pattern p = Pattern.compile("[+-]?\\d+.*");
Matcher m = p.matcher("+5.0h");
System.out.println(m.matches()); //prints true
Scanner in = new Scanner("+5.0h");
while (in.hasNext()) {
if (in.hasNext(p)) {
System.out.println(in.findInLine(p)); //prints +5.0h
}
}
in.close();
System.out.println("6.0hgf".matches("[+-]?\\d+.*?")); //prints true
}
, поэтому я хотел бы знать, почему это произошло?
Возможно, последняя строка второго примера неверна. Это то же самое, что и в первом примере. Таким образом, результат печати не может быть другим! – CoronA