Tokenizing Error: java.util.regex.PatternSyntaxException, dangling metacharacter '*'

2022-08-31 16:32:32

我正在使用标记以下格式分隔的字符串: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中的异常:在索引 0 * 附近悬空元字符 '*'

我的猜测是,原始文本文件上缺少后期限是导致这种情况的原因。我该如何解决?*


答案 1

不,问题是这是正则表达式中的保留字符,因此您需要对其进行转义。*

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

*表示“零个或多个以前的表达式”(请参阅 Pattern Javadocs),并且您没有给它任何以前的表达式,从而使您的拆分表达式非法。这就是为什么错误是PatternSyntaxException


答案 2

我有类似的问题。它发生在正则表达式中具有某些含义的所有特殊字符上。因此,您需要将正则表达式作为前缀。regex = "?""\\"

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