2014-02-04 3 views
3

Мне нужно получить символы после определенного символьного совпадения в строке. Пожалуйста, рассмотрите мою строку ввода с ожидаемым результирующим набором символов.Получить символ после определенного символа из строки

Образец Строка

*This is a string *with more than *one blocks *of values. 

Результирующая строка

Twoo 

Я сделал это

string[] SubIndex = aut.TagValue.Split('*'); 
      string SubInd = ""; 
      foreach (var a in SubIndex) 
      { 
       SubInd = SubInd + a.Substring(0,1); 
      } 

Любой он lp к этому будет оценено.

Благодаря

+2

К чему вы пришли? –

+1

Как насчет этой строки: «** *** ***** lol» – astef

+0

@astef: Для этой строки «** *** ***** lol» она должна иметь пустую строку (т. Е. «). – DonMax

ответ

5

LINQ решение:

var str = "*This is a string *with more than *one blocks *of values."; 
var chars = str.Split(new char[] {'*'}, StringSplitOptions.RemoveEmptyEntries) 
       .Select(x => x.First()); 
var output = String.Join("", chars); 
+0

Обратите внимание, что если первый символ в строке не является *, он все равно будет включен в вывод. – Brian

3
string s = "*This is a string *with more than *one blocks *of values."; 
string[] splitted = s.Split(new char[] { '*' }, StringSplitOptions.RemoveEmptyEntries); 
string result = ""; 
foreach (string split in splitted) 
    result += split[0]; 
Console.WriteLine(result); 
+0

Нет необходимости в проверке 'IsNullOrEmpty', split никогда не будет пустым из-за флага' RemoveEmptyEntries' – musefan

+0

Да, вы правы – bdn02

2

Ниже код должен работать

var s = "*This is a string *with more than *one blocks *of values." 
while ((i = s.IndexOf('*', i)) != -1) 
{ 
    // Print out the next char 
    if(i<s.Length) 
      Console.WriteLine(s[i+1]); 

    // Increment the index. 
    i++; 
} 
1
String.Join("",input.Split(new char[]{'*'},StringSplitOptions.RemoveEmptyEntries) 
        .Select(x=>x.First()) 
      ); 
+0

Вы пробовали его с помощью строки примера? Вы получите исключение из-за пустых строк. –

+0

@TimSchmelter ahh..indeed..corrected. – Anirudha

0
string strRegex = @"(?<=\*)."; 
Regex myRegex = new Regex(strRegex, RegexOptions.Multiline | RegexOptions.Singleline); 
string strTargetString = "*This is a string *with more than *one blocks *of values."; 
StringBuilder sb = new StringBuilder();  
foreach (Match myMatch in myRegex.Matches(strTargetString)) 
{ 
    if (myMatch.Success) sb.Append(myMatch.Value); 
} 
string result = sb.ToString(); 
+0

Почему каждый пользователь всегда должен появляться с регулярным выражением каждый раз, когда кому-то нужен синтаксический анализ строк. – musefan

+0

В некоторых сценариях может быть больше гибкости. Для этой простой задачи это, возможно, перебор ... –

+0

Да, некоторые сценарии ... но этот вопрос не «Как я могу что-то сделать для других сценариев». Этот вопрос явно о требованиях, и Regex не является хорошим решением. – musefan

0

см. Ниже ...

char[] s3 = "*This is a string *with more than *one blocks *of values.".ToCharArray(); 
StringBuilder s4 = new StringBuilder(); 
for (int i = 0; i < s3.Length - 1; i++) 
{ 
    if (s3[i] == '*') 
    s4.Append(s3[i+1]); 
} 
Console.WriteLine(s4.ToString()); 
Смежные вопросы