Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
可以设置Java缓冲区的位置吗?_Java_Arrays_String_Parsing - Fatal编程技术网

可以设置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个字符

继续,直到我找到匹配或EOS

使用数组很容易做到这一点,但我想在方法中做到这一点,并返回一个缓冲区,其中索引指向下一个开始处理的位置。我被引导相信CharBuffer是一个很好的解决方案,但我不确定

通过示例编辑——不完全是可编译的代码

主要

噪声发生器

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++]; }
}