gpt4 book ai didi

java - 匹配输出流上大于最大字符串限制的正则表达式模式的有效方法

转载 作者:行者123 更新时间:2023-11-30 05:25:37 26 4
gpt4 key购买 nike

我正在尝试找到一种有效的方法来对大小超过 String's max size 的 ByteArrayOutputStream 进行模式匹配.

对适合单个字符串的 ByteArrayOutputStream 进行模式匹配很简单:

private boolean doesStreamContainPattern(Pattern pattern, ByteArrayOutputStream baos) throws IOException {

/*
* Append external source String to output stream...
*/

if (pattern != null) {
String out = new String(baos.toByteArray(), "UTF-8");
if (pattern.matcher(out).matches()) {
return true;
}
}

/*
* Some other processing if no pattern match
*/
return false;
}

但是如果baos的大小超过了String max size,问题就变成了:

  1. baos 输入到多个字符串中。
  2. “滑动”模式匹配这些多个字符串的串联(即原始 baos 内容)。

第 2 步看起来比第 1 步更具挑战性,但我知道像 Unix sed 这样的实用程序在文件上执行此操作。

实现这一目标的正确方法是什么?

最佳答案

您可以编写一个简单的包装类来从流实现 CharSequence:

class ByteArrayCharSequence implement CharSequence {
private byte[] array;
public StreamCharSequence(byte[] input) {
array = input;
}

public char charAt(int index) {
return (char) array[index];
}
public int length() {
return array.length;
}
public CharSequence subSequence(int start, int end) {
return new ByteArrayCharSequence(Arrays.copyOfRange(array, start, end));
}
public String toString() {
// maybe test whether we exceeded max String length
}
}

然后匹配

private boolean doesStreamContainPattern(Pattern pattern, ByteArrayOutputStream baos) throws IOException {
if (pattern != null) {
CharSequence seq = new ByteArrayCharSequence(baos.toByteArray());
if (pattern.matcher(seq).matches()) {
return true;
}
}

/*
* Some other processing if no pattern match
*/
return false;
}

转换为 char 并使用 copyOfRange 时,边缘显然很粗糙,但它应该适用于大多数情况,您可以根据情况进行调整。 t。

关于java - 匹配输出流上大于最大字符串限制的正则表达式模式的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58689314/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com