【发布时间】:2021-07-11 14:13:13
【问题描述】:
我正在开发一个 pdf 文件查看器。 pdf文件以字节为单位存储字符,pdf文件可以有几兆字节。在这种情况下使用字符串是一个坏主意,因为一个字符串的存储空间不能被另一个字符串重用。因此,我将这些 pdf 字节存储在一个 char 数组中。在阅读下一个大pdf文件时,我可以重用char数组。
现在我需要支持一个搜索功能,以便用户可以在这个巨大的文件中找到某个文本。当我搜索时,我通常不想输入正确的大小写字母,我什至可能不记得正确的大小写,这意味着无论大小写如何,搜索都应该成功。使用时
string.IndexOf(String, StringComparison)
可以选择InvariantCultureIgnoreCase 来获取大小写匹配。
但是,将兆字节字符数组转换成同样大的字符串是个坏主意。
不幸的是,IndexOf Array 没有帮助:
public static int IndexOf<T> (T[] array, T value);
这允许在 char 数组中仅搜索 1 个字符,并且也不支持 IgnoreCase,这显然对其他数组没有意义,例如整数数组。
所以问题是:
DotNet 中可以使用哪种方法在字符数组中搜索字符串。
请在将此问题标记为重复之前阅读此内容
我知道已经有关于搜索的类似问题。但是我看到的都是以一种或另一种方式将字符数组转换为字符串,这是我绝对不想要的。
另请注意,其中许多解决方案不支持忽略大小写。该解决方案还应该正确处理奇异的 Unicode。
最后但同样重要的是,最好是 DotNet 的现有方法。
【问题讨论】:
-
char不存在这个的原因是因为您通常需要整个字符串来决定如何比较,例如是否忽略变音符号或非规范化字符。