У меня возникла проблема с поиском правильного регулярного выражения для чтения параметров файла ppm. Я не знаю, связано ли это с тем, что мое регулярное выражение неверно или я неправильно использую метод Pattern.compile, но получаю java.util.NoSuchElementException. Ниже моего регулярного выражения и кода вместе с ним. Он читает весь файл, так как мое регулярное выражение всегда возвращает null. Спасибо.Использование регулярного выражения для импорта измерений в файле ppm
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
EDIT:
Я попытался с согласованью, но он по-прежнему не работает, после скорректированного регулярного выражения. Вот мой код, он никогда не соответствует шаблону ...
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.");
}
}
}
Вы проверяете 'hasNext()' и печатаете 'nextLine?' – TheLostMind
Это наверняка проблема со Сканером. Кроме того, нет необходимости создавать объект Pattern для каждой итерации, просто создайте его один раз и используйте scanner.useDelimiter (yourPattern). Можете ли вы вставить фрагмент образца, потому что я открыл файл, который вы разместили, и в нем содержится номер лота. – sol4me
Вот образец, который я использую. Сократите его, если хотите меньший фрагмент, но он базовый. Я действительно не понимаю, почему мой код не работает ... – Lapsusone