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.
我有类似的问题regex = "?".它适用于在正则表达式中具有某些含义的所有特殊字符.所以你需要"\\"作为你的正则表达式的前缀.
String [] separado = line.split("\\*");
Run Code Online (Sandbox Code Playgroud)