我在写代码来创建一个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] 删除。
我来说两句