对于环打破了,而不是重复

杰拉德:

我在写代码来创建一个Java模板库。我在写代码的特定部分,其中一个阅读器将读取模板的文本,并拉出占位符(“$ {占位符})。到目前为止,当Jtesting,它似乎工作,一个占位符,但是当我尝试不止一个,代码似乎没有环回和读取模板的其余部分。

我不能为我的生活,看看为什么代码失败。

我调试的代码,和所有我能看到的是,当它存储在第一个占位符,它不是循环返回,而是它的辍学。

代码如下:

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;

    }

}

而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);
泰特斯:

第一个占位符后,您目前的解决方案回报被发现,你可以改变它要经过的所有字符reader,然后返回。下面是一个例子:

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();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章