Funciones de expresiones regulares o para la validación de un archivo?

Liger:

Tengo una tarea en la mano para validar el esquema de un archivo de texto que contiene los datos siguientes

50 entradas en el formato siguiente,

Los números de serie son 1-50 seguido por una lengüeta seguido por un número aleatorio n que van desde 100 <= n <= 500

e.g. 1 <tab> 256

Desde una expresión regular es más fácil comprobar el esquema del archivo y es más fácil de mantener que estoy prefiriendo utilizar expresiones regulares en lugar de una clase que va a analizar y validar cada cadena en ningún momento

El archivo de salida debe ser como

Line 1 formatted correctly
Invalid format on line 2 (51 1000) + (Error message that can be set using a custom exception class)

Mi pregunta es, puede regex ser lo suficientemente potente como para darme la salida deseada es decir, provocar una excepción al conjunto de la manera correcta?

Mi intento es inferior a

public class TestOutput {

    private final int MAX_LINES_TO_READ = 50;

    private final String REGEX = "RAWREGEX";

    public void testFile(String fileName) {

        int lineCounter = 1;

        try {

            BufferedReader br = new BufferedReader(new FileReader(fileName));

            String line = br.readLine();

            while ((line != null) && (lineCounter <= MAX_LINES_TO_READ)) {

                // Validate the line is formatted correctly based on regular expressions                
                if (line.matches(REGEX)) {
                    System.out.println("Line " + lineCounter + " formatted correctly");
                }
                else {
                    System.out.println("Invalid format on line " + lineCounter + " (" + line + ")");
                }

                line = br.readLine();
                lineCounter++;
            }

            br.close();

        } catch (Exception ex) {
            System.out.println("Exception occurred: " + ex.toString());
        }
    }

    public static void main(String args[]) {

        TestOutput vtf = new TestOutput();

        vtf.testFile("transactions.txt");
    }   
}

Aquí están mis preguntas

  1. ¿Cómo el diseño óptimo debe ser similar (expresión regular el uso o no)?
  2. En caso afirmativo, ¿Cuál expresión regular para su uso?
Bohemia:

Utilice esta expresión regular:

String REGEX = "([1-9]|[1-4]\\d|50)\t([1-4]\\d\\d|500)";

Ver demostración en vivo .

Para explicar...

[1-9]|[1-4]\\d|50 significa “cualquier número 1-50”, obtenidos por tres alternancias 1-9, 10-49 y 50.

Del mismo modo, [1-4]\\d\\d|500significa “100-500”, logrado por dos alternancias 100-499 y 500.

Con sólo 50 líneas, “rendimiento” es irrelevante (a menos que usted lo está haciendo 100 de las veces por segundo) - seleccionar el método que sea más legible y comprensible. Si puede utilizar expresiones regulares, por lo general resulta en menos código, y se lleva a cabo lo suficientemente bien.


Código de ensayo:

private final String REGEX = "([1-9]|[1-4]\\d|50)\\t([1-4]\\d\\d|500)";

public void testFile(String fileName) {
    int lineCounter = 1;
    try {
        BufferedReader br = new BufferedReader(new FileReader(fileName));
        String line = br.readLine();
        while ((line != null) && (lineCounter <= MAX_LINES_TO_READ)) {
            if (line.matches(REGEX)) {
                System.out.println("Line " + lineCounter + " formatted correctly");
            } else {
                System.out.println("Invalid format on line " + lineCounter + " (" + line + ")");
            }
            line = br.readLine();
            lineCounter++;
        }
        br.close();
    } catch (Exception ex) {
        System.out.println("Exception occurred: " + ex.toString());
    }
}

archivo de prueba:

1   123
50  346
23  145
68  455
1   535

Salida:

Line 1 formatted correctly
Line 2 formatted correctly
Line 3 formatted correctly
Invalid format on line 4 (68    455)
Invalid format on line 5 (1 535)

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=233101&siteId=1
Recomendado
Clasificación