1

我很难找到正确的正则表达式来读取 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.");
        }
    }
}
4

1 回答 1

0

您的正则表达式永远无法匹配。

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

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

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

(请注意,这也匹配类似" 1 "or"1 "或什至的字符串" ")。

于 2014-09-15T07:24:10.180 回答