有一个IndexOf
操作可以更快地搜索someChar
,但我假设您找到所需长度的实际功能比这更复杂。在这种情况下,我建议复制someString
到 a Char[]
,进行搜索,然后使用new String(Char[], Int32, Int32)
构造函数生成最终字符串。索引 a将比索引 a或thatChar[]
更有效,除非您希望通常只需要字符串的一小部分,将所有内容复制到将是“胜利”(当然,除非您可以简单地使用类似的东西)。String
StringBuilder
Char[]
IndexOf
即使字符串的长度通常比感兴趣的长度大得多,您最好还是使用Char[]
. 将 预初始化Char[]
为某个大小,然后执行以下操作:
字符 [] 温度 = 新字符 [1024];
诠释我=0;
while (i < theString.Length)
{
int subLength = theString.Length - i;
if (subLength > temp.Length) // 可以对 subLength 施加其他约束,前提是
subLength = temp.Length; // 它大于零。
theString.CopyTo(i, temp, 0, subLength);
...对数组做一些事情
i+=子长度;
}
完成后,您可以使用单个 SubString 调用来构造一个包含原始字符的字符串。如果您的应用程序需要创建一个字符与原始字符不同的字符串,您可以使用 a StringBuilder
and,在上述循环中,使用该Append(Char[], Int32, Int32)
方法将处理后的字符添加到其中。
另请注意,当上述循环构造时,可以决定subLength
在循环中的任何点减少,只要它不减少到零。例如,如果要查找字符串是否包含由括号括起来的 16 位或更少位的质数,则可以从扫描开括号开始;如果找到它,并且正在寻找的数据可能会超出数组,则设置subLength
为 open-paren 的位置,然后重新循环。这种方法将导致少量的冗余复制,但不会太多(通常没有),并且无需跟踪循环之间的解析状态。一个非常方便的模式。