标记错误:java.util.regex.PatternSyntaxException,悬空元字符'*'

and*_*and 53 java regex split tokenize

我正在使用以下格式split()标记分隔的字符串*:

name*lastName*ID*school*age
%
name*lastName*ID*school*age
%
name*lastName*ID*school*age
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码从名为"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();
    }
Run Code Online (Sandbox Code Playgroud)

我得到了这个例外:

线程"main"中的异常java.util.regex.PatternSyntaxException:在索引0*附近悬挂元字符'*'

我的猜测是*原始文本文件中缺少一个年龄后导致了这种情况.我该如何解决这个问题?

Mic*_*ers 145

不,问题是它*是正则表达式中的保留字符,因此您需要将其转义.

String [] separado = line.split("\\*");
Run Code Online (Sandbox Code Playgroud)

*表示"前一个表达式的零个或多个"(请参阅PatternJavadocs),并且您没有给它任何先前的表达式,使得您的拆分表达式非法.这就是错误的原因PatternSyntaxException.


Ani*_*kur 6

我有类似的问题regex = "?".它适用于在正则表达式中具有某些含义的所有特殊字符.所以你需要"\\"作为你的正则表达式的前缀.

String [] separado = line.split("\\*");
Run Code Online (Sandbox Code Playgroud)