#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
withSubstring
выделит только другую строку. Конечно, я признаю, что уровень излишеств незначителен и никогда не был бы узким местом в любой реальной ситуации, просто лично я предпочитаю избегать ненужных излишеств. Однако вы правы насчет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
вызовы. Фу.