我希望在满足某些特定条件的字符出现之前,从Reader
读取字符串。我尝试了以下代码:
private boolean isSatisfying(int codePoint) {
return codePoint == '@' || codePoint == '$'; // for example
}
public String read(Reader reader) {
StringBuilder result = new StringBuilder();
for (int codePoint = -1 ; (codePoint = reader.read()) != -1 ;) {
if (isSatisfying(codePoint)) {
break;
}
result.appendCodePoint(codePoint);
}
return result.toString();
}
它有效,但在执行read()
后,reader
的指针位于满足上述示例中的条件(@
或$
)的字符处,而不是结果字符串的结尾。
我想将reader
的指针保留在结果字符串的末尾,但是没有放回Reader
指针的方法。
有什么好方法可以实现它吗?
答案 0 :(得分:0)
在你的for循环条件中添加它之后设置你的codePoint:
public String read(Reader reader) {
StringBuilder result = new StringBuilder();
for (int codePoint = -1 ; codePoint ;) {
if (isSatisfying(codePoint)) {
break;
}
result.appendCodePoint(codePoint);
codePoint = reader.read()) != -1;
}
return result.toString();
}
答案 1 :(得分:0)
您需要一个缓冲读卡器才能执行此操作。请参阅此处的文档:
https://docs.oracle.com/javase/8/docs/api/java/io/BufferedReader.html
答案 2 :(得分:0)
我只是使用继续而不是中断(结果字符串不包含特殊字符,但会处理整个文件)
public String read(Reader reader) {
StringBuilder result = new StringBuilder();
for (int codePoint = -1 ; (codePoint = reader.read()) != -1 ;) {
if (isSatisfying(codePoint)) {
continue;
}
result.appendCodePoint(codePoint);
}
return result.toString();
}
如果您不想处理整个文件,请按照中断进行处理,但修改返回行。
return result.toString().substring(0, result.toString().length()-1);