首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringReader的mark()方法

StringReader的mark()方法
EN

Stack Overflow用户
提问于 2014-12-09 23:26:49
回答 2查看 222关注 0票数 1

我的问题与Java的StringReader的mark()方法有关。以下是我的场景:

代码语言:javascript
复制
StringReader reader = new StringReader("Test123");

reader.mark(0);
boolean bool = doSomething(reader)//reads from reader with calls to mark() inside
if (bool == false) {
    reader.reset();
}

doSomethingElse(reader);

如果doSomething()返回false,我想把我的阅读器恢复到原来的状态。因为doSomething()只会将读取器重置回先前调用的标记,并且存在从doSomething()方法内部调用的标记,所以在进入doSomething()方法之前,它不会引用一行调用的标记。有没有可能解决这个问题?非常感谢你的帮助!

EN

回答 2

Stack Overflow用户

发布于 2014-12-09 23:38:31

  1. 由于您知道doSomething()调用mark(),因此在此之前调用mark()是没有意义的。
  2. 您可以从相同的字符串创建新的StringReader,而不是重置StringReader。<代码>H29<代码>G210
票数 1
EN

Stack Overflow用户

发布于 2014-12-09 23:42:17

简单的解决方案是在重置之前标记它:

代码语言:javascript
复制
StringReader reader = new StringReader("Test123");

boolean bool = doSomething(reader)//reads from reader with calls to mark() inside
if (bool == false) {
    reader.mark(0);
    reader.reset();
}

doSomethingElse(reader);

如果无法做到这一点,可以将初始标记位置和读取器包装在自定义对象中:

代码语言:javascript
复制
class MyReader {
   private int mark = 0;
   private StringReader reader;

   MyReader( StringReader reader, int mark ) {
      this.reader = reader;
      this.mark = mark;
   }

   public StringReader getReader() { return reader; }

   public void hardReset() {
      reader.mark(mark);
      reader.reset();
   }
}

您可以这样使用它:

代码语言:javascript
复制
StringReader reader = new StringReader("Test123");
MyReader mr = new MyReader( reader, 0 );
boolean bool = doSomething(mr); // mr.getReader().mark(i); 
if (bool == false) {
     mr.hardReset();
}

doSomethingElse(mr);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27382619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档