是否可以设置Java CharBuffer的位置?

时间:2011-11-23 10:44:44

标签: java arrays string parsing

对我要做的事情进行了一些回填。

我想解析一个String,但是能够进行比较,例如

  • 位置x的1个字符
  • 位置x处的2个字符
  • ...
  • 位于x位置的
  • n个字符

失败

  • 位置x + 1
  • 的1个字符
  • 位置x + 1处的2个字符
  • ...
  • 位于x + 1 的
  • n个字符

继续,直到我得到一场比赛,或EOS。

使用数组很容易做到这一点,但我想在一个方法中执行此操作并返回一个索引指向下一个开始处理的索引的缓冲区。我被引导相信CharBuffer对此很好,但我不确定。

编辑作为示例 - 不完全可编译的代码!

主要

List template1 = new List();
List template2 = new List();
String exampleInput = "oneone two";

template1.add ( "one" );
template1.add ( "two" );
template1.add ( "three" );

template2.add ( "one" );
template2.add ( "one" );
template2.add ( "two" );

Set templates = new Set();
templates.add ( template1 );
templates.add ( template2 );

NoisyParser np = new NoisyParser();
np.parse( templates, exampleInput );

NoisyParser

void parse( Set templates, Sting inp ){
     iterate over each template that matches inp{
        find_match( template, inp );
     }
}

boolean find_match( template, inp ) {
    This is where I need the magic to work out if the current element
    in template matches the current position of inp, or inp+1, give or take.
}

2 个答案:

答案 0 :(得分:3)

CharBuffer有一个内部索引,您可以从中进行相对读取,是的,这应该适合您的标准。

您可以使用(继承的)Buffer.position(int newPosition)方法设置位置。

您还可以mark一个位置,reset到上一个标记。


由于NIO包中的类通常用于(以及用于)I / O,我建议您考虑在课程中包装char[]int pos

class PositionableCharArray {
    int pos;
    char[] chars;

    ...
    public void setPos(int pos) { ... }
    public char readChar() { return chars[pos++]; }
}

答案 1 :(得分:1)

您可以使用Buffer.charAt(int)来实现此功能,以获取相对于当前位置的字符,并Buffer.get()来提升当前位置。或者您可以使用Buffer操作来操纵位置。

但我认为你最好实现自己的类,将字符读入char[](或String)并提供执行所需原始操作的方法。您可能使用CharBuffer获得更高效的解决方案,但可能性不会成为性能瓶颈。