作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在编写代码来创建 Java 模板库。我正在编写一段特定的代码,读者将在其中阅读模板的文本并提取占位符 ("${placeholder})。到目前为止,在进行 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();
}
关于java - For 循环中断而不是重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56064920/
我是一名优秀的程序员,十分优秀!