我在查找正确的正则表达式以读取ppm文件尺寸时遇到问题。我不知道是不是因为我的正则表达式错误或者我滥用了Pattern.compile方法,但是我得到了一个java.util.NoSuchElementException。在我的正则表达式和代码之下。它读取整个文件,因为我的正则表达式总是返回null。 感谢。
package projet;
import java.awt.Color;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
public class Ppm extends File{
private Dimensions d;
private Color[][] p;
public Ppm(String pathname) {
super(pathname);
}
public void read(){
try {
Scanner s=new Scanner(new FileReader(this.getPath()));
while(s.findInLine(Pattern.compile("/^\\d* \\d*\\s$/")) == null && s.hasNext()){
System.out.println(s.nextLine());
}
s.close();
} catch (FileNotFoundException ex) {
Logger.getLogger(Ppm.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("Check filepath.");
}
}
}
这是我的示例文件:https://www.dropbox.com/s/z35dvi90zdfkws0/carte1.ppm?dl=0
编辑:
我尝试使用匹配器,但仍然无效,遵循更正后的正则表达式。这是我的代码,它永远不会匹配模式...
public class Ppm extends File{
private Dimensions d;
private Color[][] p;
public Ppm(String pathname) {
super(pathname);
d=new Dimensions(0, 0);
}
public void read(){
try {
Scanner s=new Scanner(new FileReader(this.getPath()));
Pattern p=Pattern.compile("^\\d+ \\d+\\s$");
Matcher m;
while(s.hasNext()){
m=p.matcher(s.nextLine());
if(m.matches()){
System.out.println("Found");
}
}
//System.out.println("W : "+d.getWidth()+" H: "+d.getHeight());
} catch (FileNotFoundException ex) {
Logger.getLogger(Ppm.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("Check filepath.");
}
}
}
答案 0 :(得分:0)
你的正则表达式永远不会匹配。
Pattern.compile("/^\\d* \\d*\\s$/")
要求文本在字符串开头之前有一个斜杠,在字符串结尾之后。与PHP不同,Java不使用正则表达式分隔符。尝试
Pattern.compile("^\\d* \\d*\\s$")
(请注意,这也会匹配" 1 "
或"1 "
或" "
等字符串。