_documentContent
包含整个文档作为html视图源。
patternToFind
包含要在_documentContent
中搜索的文字。
下面的代码段可以正常工作。 但是,当遇到像韩语这样的语言时,相同的代码根本不起作用。
样本文件
现在时,就像你所学到的一样。你拿一个动词的字典形式,放下다,添加适当的结尾。
먹다 - 먹+어요=먹어요
마시다 - 마시+어요 - 마시어요 - 마셔요。
这个时态用来表示现在发生的事情。我吃。我喝。这是现在的总称。
当我试图找到먹时,下面的代码失败。
有人可以建议一些解决方案吗
using System;
using System.Collections.Generic;
using System.Text;
namespace MultiByteStringHandling
{
class Program
{
static void Main(string[] args)
{
string _documentContent = @"먹다 - 먹 + 어요 = 먹어요";
byte[] patternToFind = Encoding.UTF8.GetBytes("먹");
byte[] DocumentBytes = Encoding.UTF8.GetBytes(_documentContent);
int intByteOffset = indexOf(DocumentBytes, patternToFind);
Console.WriteLine(intByteOffset.ToString());
}
public int indexOf(byte[] data, byte[] pattern)
{
int[] failure = computeFailure(pattern);
int j = 0;
if (data.Length == 0) return 0;
for (int i = 0; i < data.Length; i++)
{
while (j > 0 && pattern[j] != data[i])
{
j = failure[j - 1];
}
if (pattern[j] == data[i])
{
j++;
}
if (j == pattern.Length)
{
return i - pattern.Length + 1;
}
}
return -1;
}
/**
* Computes the failure function using a boot-strapping process,
* where the pattern is matched against itself.
*/
private int[] computeFailure(byte[] pattern)
{
int[] failure = new int[pattern.Length];
int j = 0;
for (int i = 1; i < pattern.Length; i++)
{
while (j > 0 && pattern[j] != pattern[i])
{
j = failure[j - 1];
}
if (pattern[j] == pattern[i])
{
j++;
}
failure[i] = j;
}
return failure;
}
}
}