Каков наилучший способ удалить части строки? (С #) - PullRequest
2 голосов
/ 10 марта 2010

Я перебираю массив, и там есть строка, которая выглядит примерно так: «1001 - Некоторая составляющая».

Прямо сейчас, просматривая массив, я получаю всю строку

string ingCode = theData[i + 1];

Но что мне действительно нужно, так это просто «1001», а не весь шибан.

Ответы [ 6 ]

9 голосов
/ 10 марта 2010

Объедините некоторые из перечисленных методов, чтобы получить первую часть или код

string myString = "1001--Some ingredient";
string myPortionOfString = myString.Substring(0, myString.IndexOf("--"));

Это позволяет обрабатывать коды ингредиентов длиннее (или короче), чем 4 символа.

Если разделитель изменяется, но требуемая информация всегда является числом, используйте Regex для анализа только чисел.

3 голосов
/ 10 марта 2010

, если разделитель всегда '-', вы можете сделать снимок:

string ingCode = theData[i+1].Split('-')[0];

Если вам всегда интересны числа в начале строки, попробуйте RegEx:

string ingCode = System.Text.RegularExpressions.Regex.Match(theData[i+1], @"^([0-9]*)").ToString();
3 голосов
/ 10 марта 2010

Вы можете использовать SubString метод:

    string myString = "1001--Some ingredient";
    string myPortionOfString = myString.Substring(0, 4);
    Console.WriteLine(myPortionOfString);

Вывод консоли такой:

1001

Вы ссылались на это?

EDIT:

После просмотра комментариев, если вы не знаете точно, сколько чисел находится перед "-", лучшим ответом будет ответ, предложенный @ Rob Allen . Я даю ему +1.

//...
string myPortionOfString = myString.Substring(0, myString.IndexOf("--"));
//...
2 голосов
/ 10 марта 2010

Вы можете использовать регулярное выражение:

Regex rgx = new Regex(@"(?<Code>\d+)--(?<Ingedient>\w+)", RegexOptions.IgnoreCase);
MatchCollection matches = rgx.Matches("1001--Some Ingredient");
foreach(Match match in matches)
    Console.WriteLine("Code:{0}, Ingredient:{1}",match.Groups["Code"], match.Groups["Ingredient"]);
1 голос
/ 10 марта 2010

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

Предполагается, что мы всегда ищем первые 4 символа:

string ingCode = theData[i + 1].Substring(0, 4);

Предполагается, что мы ищем все, что будет раньше "-":

string ingCode = theData[i + 1].Split(new string[] {"--"}, StringSplitOptions.None)[0];

Предполагается, что мы ищем 1 или более цифр в начале строки:

string ingCode = Regex.Match(theData[i + 1], @"^\d+").Captures[0];
0 голосов
/ 10 марта 2010

Вы можете использовать класс StringBuilder или просто создать новую строку, добавив индексы в [0], [1], [2], [3] (в случае, если вам всегда нужны первые 4 символа. Вы также можете создать функцию Left:

Console.Writeline(Left(myString, 4));

public static string Left(string param, int length)        
{        
string result = param.Substring(0, length);             
return result;        
} 

Еще одна вещь, которую вы можете сделать, это создать метод расширения строки:

static class StringExtensions
 {
  public static String Left(this string str, int numbOfChars)
   {
    if(str.Length <= numbOfChars) return str;
    return str.Substring(0, numbOfChars);
   }

  public static String Right(this string str, int numbOfChars)
    {
      if numbOfChars >= str.Length) return str;
      return str.Substring(str.Length, str.Length-numbOfChars);
    }
 }

Вы можете назвать это так:

String test = "Hello World";
String str = test.Left(3); //returns Hel
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...