可以设置Java缓冲区的位置吗?
对我正在尝试做的事情做一点补充 我想解析一个字符串,但能够比较,例如可以设置Java缓冲区的位置吗?,java,arrays,string,parsing,Java,Arrays,String,Parsing,对我正在尝试做的事情做一点补充 我想解析一个字符串,但能够比较,例如 位置x处1个字符 位置x处有2个字符 位置x处的n个字符 如果不行的话 位置x+1处的1个字符 位置x+1处有2个字符 位置x+1处的n个字符 等 继续,直到我找到匹配或EOS 使用数组很容易做到这一点,但我想在方法中做到这一点,并返回一个缓冲区,其中索引指向下一个开始处理的位置。我被引导相信CharBuffer是一个很好的解决方案,但我不确定 通过示例编辑——不完全是可编译的代码 主要 噪声发生器 void pa
- 位置x处1个字符
- 位置x处有2个字符
- 位置x处的n个字符
- 位置x+1处的1个字符
- 位置x+1处有2个字符
- 位置x+1处的n个字符
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.
}
CharBuffer
有一个内部索引,您可以从中进行相对读取,所以是的,这应该符合您的标准
使用(继承的)方法设置位置
您还可以标记
一个位置,并重置
到上一个标记
由于NIO包中的类通常用于(和用于)I/O,所以我鼓励您考虑在类中封装<代码> char [< /代码>和<代码> int POS < /代码>:
class PositionableCharArray {
int pos;
char[] chars;
...
public void setPos(int pos) { ... }
public char readChar() { return chars[pos++]; }
}
您可以使用
Buffer.charAt(int)
获取相对于当前位置的字符,以及Buffer.get()
推进当前位置来实现这一点。或者您可以使用缓冲
操作来操纵位置
但我认为最好实现自己的类,将字符读入
char[]
(或String
)并提供执行所需基本操作的方法。您可以使用CharBuffer
获得更高性能的解决方案,但很可能这不会成为性能瓶颈。您的具体要求是什么?比较两个字符串并找到它们不匹配的第一个位置?或者比较n个字符串?这有点复杂,我有很多字符串列表,我想和一个嘈杂的输入字符串进行匹配,看看哪个列表匹配,有没有。我想最好你提供一个小例子。比方说,一个列表有两个字符串,另一个列表有三个字符串和输入字符串,然后指定您期望的结果是什么。你的确切要求在文章中有点难以理解。难道他不能重用java.text.ParsePosition
?听起来就是为了这个。谢谢你的回复,你的位置数组和字符缓冲区不就是我想要使用它们的方式吗?可能吧。PositionableCharArray
将有一个小得多的接口,这使得更容易确保一些不变量保持不变(chars
永不改变,干杯,这似乎是共识。我可能最终会试图将缓冲区塞进我想要的东西中。
class PositionableCharArray {
int pos;
char[] chars;
...
public void setPos(int pos) { ... }
public char readChar() { return chars[pos++]; }
}