对我要做的事情进行了一些回填。
我想解析一个String,但是能够进行比较,例如
失败
等
继续,直到我得到一场比赛,或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.
}
答案 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
获得更高效的解决方案,但可能性不会成为性能瓶颈。