0

この質問にはフォローアップの質問があります ここ.


このチュートリアルに従って、指定された RegexTestHarness をコンパイルすると、console.readLine(String) と console.Format(String) でそれぞれ次のエラーが発生します。

  1. タイプ Console のメソッド readLine() は、引数 (文字列) には適用されません。

  2. 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*****
            }
        }
    }
}

ここに画像の説明を入力

4

2 に答える 2

3

JavaDocからConsole

フォーマットされたプロンプトを提供し、コンソールから 1 行のテキストを読み取ります。

これはどのように作動しますか?さて、それはパラメータでフォーマット文字列を使用します。パラメータは varargs 配列であるため、特別な構文を使用せずに何も渡すことも、多く渡すこともできます。

例えば

console.readLine("No arguments");

プロンプトに「引数なし」と出力するだけです。

final String a = "A";
console.readLine("With string, %s", a);

プロンプトに「With string, A」と出力します。

final String a = "A";
final int b = 10;
console.readLine("With string %s and a formatted number %.2f", a, b);

プロンプトに「文字列 A とフォーマットされた数値 10.00 を使用」を出力します。

于 2014-06-15T08:55:19.367 に答える
1

フォーマット文字列には (ほとんどの場合)%dまたはのようなものが含まれて%sおり、これらの項目はメソッド呼び出しのフォーマット文字列に続く式に対応している必要があります。これらは「参照される引数」です。

Pattern/Matcher の呼び出しでどのようなエラーが発生しましたか?

于 2014-06-15T08:52:44.023 に答える