Para bucle romper en lugar de repetir

Stevie:

Estoy escribiendo código para crear una biblioteca de plantillas de Java. Estoy escribiendo una pieza específica de código en un lector leerá el texto de la plantilla y sacar los marcadores de posición ( "$ {} marcador de posición). Hasta ahora, cuando Jtesting, parecía funcionar con un único marcador de posición, pero cuando intento más de uno, el código no parece volver bucle y leer el resto de la plantilla.

No puedo, por la vida de mí, ver por qué el código está fallando.

He depurado el código, y todo lo que puedo ver es que cuando se almacena el primer marcador de posición, no es un bucle hacia atrás, pero en su lugar se deserción.

Código es el siguiente:

import java.io.IOException;
import java.io.Reader;

public class placeholderFinder {
    private Reader reader;

    public placeholderFinder(Reader reader) {
        this.reader = reader;
    }

    public static final int NORMALTEXT = 0;
    public static final int PLACEHOLDERTEXT = 1;

    private int state = NORMALTEXT;
    private StringBuilder placeholder = new StringBuilder();

    public String nextPlaceholderFinder() throws IOException {
        for (int p = reader.read(); p != -1; p = reader.read()) {
            if (p == '$') {
                if (state == NORMALTEXT) {
                    state = PLACEHOLDERTEXT; 
                    placeholder.append((char) p);
                } 
            } else if (state == PLACEHOLDERTEXT) {
                        placeholder.append((char) p);
                    }

            if (p == '}') {
                    if (state == PLACEHOLDERTEXT) {
                        state = NORMALTEXT;
                        String placeholderStore = placeholder.toString();
                        placeholder.setLength(0);
                        return placeholderStore;

                    }

                }

            }

        return null;

    }

}

Y el Jtest

@Test
void testWithPlaceholders() throws IOException {
    Reader reader = new StringReader("a ${name} ${date}");
    placeholderFinder finder = new placeholderFinder(reader);
    String expectedresult = "${name}${date}";
    String actualcode = finder.nextPlaceholderFinder();
    assertEquals(expectedresult, actualcode);
Tito:

Su declaración solución actual después de que el primer marcador de posición se encuentra, se puede cambiar a pasar por todos los personajes de la readerantes de regresar. Aquí hay un ejemplo:

public String nextPlaceholderFinder() throws IOException {
    for (int p = reader.read(); p != -1; p = reader.read()) {
        if (p == '$') {
            if (state == NORMALTEXT) {
                state = PLACEHOLDERTEXT; 
                placeholder.append((char) p);
            } 
        } else if (state == PLACEHOLDERTEXT) {
            placeholder.append((char) p);
        }
        if (p == '}') {
            if (state == PLACEHOLDERTEXT) {
                state = NORMALTEXT;
            }
        }
    }
    return placeholder.toString();
}

Supongo que te gusta

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