C # Как удалить каждый символ после чего-либо в каждой строке

#c# #.net

#c# #.net

Вопрос:

Итак, я пытался выяснить, как удалять символы после определенной точки в каждой строке, например, у меня есть список, подобный:

 dskfokes=dasfn3rewk
dsanfiwen=434efsde
damkw4343=o3rm3i
dmfkim303rk2=0439wefksd
32i32j9esfj=42393jdsf
  

Как бы я удалил все в каждой строке после '=' ?

Комментарии:

1. как насчет использования регулярных выражений

Ответ №1:

Используйте string.indexOf() чтобы получить индекс символа, который вы хотите удалить, затем string.Remove() для выполнения удаления.

 string str = "dskfokes=dasfn3rewk";
str = str.Remove(str.IndexOf('='));
  

Комментарии:

1. 1, но я бы добавил, что перед передачей результата в Remove() было бы лучше проверить, действительно ли был найден индекс.

Ответ №2:

Один из подходов заключается в использовании LINQ:

 var strings = new string[] {
    "dskfokes=dasfn3rewk
,   "dsanfiwen=434efsde
,   "damkw4343=o3rm3i
,   "dmfkim303rk2=0439wefksd
,   "32i32j9esfj=42393jdsf
};
var res = strings.Select(s => s.Split('=')[0]).ToArray();
  

Это разбивает каждую строку на = и удаляет все после первого '=' символа, если он там есть.

Комментарии:

1. Использование Split() является излишним, когда вам нужна только часть до первого = знака.

2. @SamuelNeff Это небольшой перебор для ситуации, когда в строке всего несколько знаков равенства. С другой стороны, это позволяет вам пропустить -1 проверку, когда = его там нет.

3. Это не просто перебор, если есть более одного знака равенства. С IndexOf поиск прекратится, как только будет найден первый, тогда как с Split он будет продолжаться независимо. Кроме того, Split выделит массив строк, тогда как IndexOf with Substring выделит только другую строку. Конечно, я признаю, что уровень излишеств незначителен и никогда не был бы узким местом в любой реальной ситуации, просто лично я предпочитаю избегать ненужных излишеств. Однако вы правы насчет Split устранения необходимости проверки индекса. Это действительно вопрос личных предпочтений.

Ответ №3:

Вы также можете сделать это, используя String.Split() например

 string[] allWords = new string[] {
"dskfokes=dasfn3rewk",
"dsanfiwen=434efsde",
"damkw4343=o3rm3i",
"dmfkim303rk2=0439wefksd",
"32i32j9esfj=42393jdsf"
};

foreach(string s in allWords)
{
    string[] urstring = s.Split('=');
    Console.WriteLine(urstring[0]);
}
  

Ответ №4:

Я предлагаю вам использовать комбинацию операций обработки строк SubString и IndexOf для достижения этого рассмотрим пример:

 List<string> inputLine = new List<string>(){ "dskfokes=dasfn3rewk",
                                          "dsanfiwen=434efsde",
                                          "damkw4343=o3rm3i",
                                          "dmfkim303rk2=0439wefksd",
                                          "32i32j9esfj=42393jdsf"};
List<string> outputLines = inputLine.Select(x => 
                           x.IndexOf('=') == -1 ? x :
                           x.Substring(0, x.IndexOf('='))).ToList();
  

Примечание: IndexOf Вернет -1 , если указанный индекс не был найден, в таких случаях substring метод выдает ошибки, поскольку -1 индекс не будет действительным. Итак, мы должны проверить наличие индекса внутри строки, прежде чем продолжить. вы также можете попробовать простой foreach способ, подобный этому:

 List<string> outputLines=new List<string>();
int currentCharIndex=-1;
foreach (string line in inputLine)
{
    currentCharIndex = line.IndexOf('=');
    if(currentCharIndex ==-1)
        outputLines.Add(line);
    else
        outputLines.Add(line.Substring(0,currentCharIndex));
}
  

Комментарии:

1. повторяющиеся IndexOf вызовы. Фу.