この質問にはフォローアップの質問があります ここ.
このチュートリアルに従って、指定された RegexTestHarness をコンパイルすると、console.readLine(String) と console.Format(String) でそれぞれ次のエラーが発生します。
タイプ Console のメソッド readLine() は、引数 (文字列) には適用されません。
Console 型のメソッド format(String, Object[]) は、引数 (String, String, int, int) には適用されません。
documentationによると、そこには2つの引数が必要です:
public String readLine(String fmt, Object... args
)public Console format(String fmt, Object... args
)
両方のメソッドの Object 型の 2 番目の引数は次のとおりです。
- 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*****
}
}
}
}