У этого вопроса есть дополнительный вопрос здесь.
После этот учебник и компиляции данного RegexTestHarness дает следующее ошибки в console.readLine(String) и console.Format(String) соответственно:
Метод readLine() в типе Console неприменим для аргументов (String)
Формат метода (String, Object[]) в типе Console неприменим для аргументов (String, String, int, int)
Согласно documentation, там требуются два аргумента:
public String readLine(String fmt, Object... args
)public Console format(String fmt, Object... args
)
Второй аргумент типа Object для обоих методов:
- args — аргументы, на которые ссылаются спецификаторы формата в строке формата. Если аргументов больше, чем спецификаторов формата, дополнительные аргументы игнорируются. Количество аргументов является переменным и может быть равно нулю. Максимальное количество аргументов ограничено максимальным размером массива Java, как определено.
Поэтому я считаю, что это изменилось после публикации учебника.
ВОПРОС:-
Что означают аргументы, на которые ссылаются спецификаторы формата?
Сначала я подумал, что это сами спецификаторы формата, но потом я также получаю сообщение об ошибке в операторе Matcher matcher = pattern.matcher(console.readLine("Enter input string to search: "));
.
import java.io.Console;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
/*
* Enter your regex: foo
* Enter input string to search: foo
* I found the text foo starting at index 0 and ending at index 3.
* */
public class RegexTestHarness {
public static void main(String[] args){
Console console = System.console();
if (console == null) {
System.err.println("No console.");
System.exit(1);
}
while (true) {
Pattern pattern =
Pattern.compile(console.readLine("%nEnter your regex: ")); //********ERROR*****
Matcher matcher =
pattern.matcher(console.readLine("Enter input string to search: ")); //********ERROR*****
boolean found = false;
while (matcher.find()) {
console.format("I found the text" + //********ERROR*****
" \"%s\" starting at " +
"index %d and ending at index %d.%n",
matcher.group(),
matcher.start(),
matcher.end());
found = true;
}
if(!found){
console.format("No match found.%n"); //********ERROR*****
}
}
}
}