1. ホーム
  2. java

[解決済み] トークン化エラー: java.util.regex.PatternSyntaxException, dangling metacharacter '*'.

2022-01-29 02:23:58

質問

を使用しています。 split() で区切られた文字列をトークン化する。 * をこのフォーマットで表示します。

name*lastName*ID*school*age
%
name*lastName*ID*school*age
%
name*lastName*ID*school*age

このコードで「entrada.al」というファイルから読み込んでいます。

static void leer() {

    try {
        String ruta="entrada.al";
        File myFile = new File (ruta);
        FileReader fileReader = new FileReader(myFile);

        BufferedReader reader = new BufferedReader(fileReader);

        String line = null;

        while ((line=reader.readLine())!=null){
            if (!(line.equals("%"))){
                String [] separado = line.split("*"); //SPLIT CALL
                names.add(separado[0]);
                lastNames.add(separado[1]);
                ids.add(separado[2]);
                ages.add(separado[3]);
            }
        }

        reader.close();
    }

そして、この例外が発生するんです。

スレッド "main" java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0 で例外が発生しました。 *

私の推測では * の後、元のテキストファイルの年齢が原因です。どうすれば回避できるのでしょうか?

解決方法は?

いいえ、問題は * は正規表現では予約文字なので、エスケープする必要があります。

String [] separado = line.split("\\*");

* は、"前の式のゼロまたはそれ以上"を意味します([...]を参照)。 Pattern Javadocs というように、前の式を与えていないため、分割式が不正になります。そのため、エラーになったのは PatternSyntaxException .