使用正则表达式导入ppm文件中的维度

时间:2014-09-15 06:17:59

标签: java regex ppm

我在查找正确的正则表达式以读取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.");
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你的正则表达式永远不会匹配。

Pattern.compile("/^\\d* \\d*\\s$/")

要求文本在字符串开头之前有一个斜杠在字符串结尾之后。与PHP不同,Java不使用正则表达式分隔符。尝试

Pattern.compile("^\\d* \\d*\\s$")

(请注意,这也会匹配" 1 ""1 "" "等字符串。