_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;
}
}
}