Используя следующее регулярное выражение: ^([^;]*;){21}(.*?);
, при этом вам не нужно генерировать список разделенных дыр для поиска желаемой позиции, и как только вы достигнете ее, это будет зависеть от того, существует или нет.
Объяснение :
^ --> start of a line.
([^;]*;){Position - 1} --> notice that the symbol ; here is the delimiter, the expression will loop Pos - 1 times
(.*?) --> Non-Greedy .*
Подробнее о регулярных выражениях на C #: документация [1111 ]
В приведенном ниже примере я реализовал два примера, чтобы показать вам, как это работает.
Метод сопоставления : документация (в основном он ищет только первое вхождение шаблона) RegexOptions.Singleline : Обрабатывает входные данные как сигнальную линию.
Код C #
Console.WriteLine("First Delimiter : ");
int Position = 22;
char delimiter = ',';
string pattern = @"^([^" + delimiter + "]*" + delimiter + "){" + (Position - 1) + @"}(.*?)" + delimiter;
Regex regex = new Regex(pattern, RegexOptions.Singleline);
// First Example
string Data = @"AAV,zzz,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22ABC,23,24,24";
Match Re = regex.Match(Data);
if (Re.Groups.Count > 0)
Console.WriteLine("\tMatch found : " + Re.Groups[2]);
// Second Example
Console.WriteLine("Second Delimiter : ");
Position = 8;
delimiter = ';';
pattern = @"^([^" + delimiter + "]*" + delimiter + "){" + (Position - 1) + @"}(.*?)" + delimiter;
Data = @"61d2e3f6-bcb7-4cd1-a81e-4f8f497f0da2;0;192.100.0.102:4362;2014-02-14;283;0;354;23;0;;;""0x8D15A2913C934DE"";Thursday, 19-Jun-14 22:58:10 GMT;";
regex = new Regex(pattern, RegexOptions.Singleline);
Re = regex.Match(Data);
if (Re.Groups.Count > 0)
Console.WriteLine("\tMatch found : " + Re.Groups[2]);
Вывод:
Первый разделитель:
Match found : 22ABC
Второй разделитель:
[ 113] blockquote>
Сигналы ОС являются по сути однопоточными, таким образом, важно, чтобы они были все обработаны на том же потоке. Так, диспетчер является естественным способом достигнуть этого. Думайте о нем как единственный поток события GUI для AWT.
На тангенциальной ноте, если Вы - Linux и Ваша JVM, загружает собственную библиотеку, которая вставляет ее собственные обработчики сигналов, затем необходимо будет предварительно загрузить libjsig.so. Я узнал твердый путь, когда третье лицо сетевая библиотека периодически разъединило мои соединения с неверно направленным sigpipes.
Я нашел статью об этом на IBM developerWorks. Когда ОС повысит сигнал до JVM, поток диспетчера сигнала передаст сигнал соответствующему обработчику
Открытия на обработке сигнала Java и завершении Chris White, Разработчиком программного обеспечения, IBM