Как я могу разобрать int из строки в C #? - PullRequest
3 голосов
/ 21 июня 2011

У меня есть строка, содержащая int.Как я могу разобрать int в C #?

Предположим, у меня есть следующие строки, которые содержат целое число:

    15 person 
    person 15
    person15
    15person

Как я могу отследить их или вернуть null, если нет целого числанаходится в строке?

Ответы [ 4 ]

4 голосов
/ 21 июня 2011

Вы можете удалить все нецифровые символы и проанализировать строку, если что-то осталось:

str = Regex.Replace(str, "\D+", String.Empty);
if (str.Length > 0) {
  int value = Int32.Parse(str);
  // here you can use the value
}
4 голосов
/ 21 июня 2011

Вставьте этот код в тест:

public int? ParseAnInt(string s)
{
  var match = System.Text.RegularExpressions.Regex.Match(s, @"\d+");

  if (match.Success)
  {
    int result;
    //still use TryParse to handle integer overflow
    if (int.TryParse(match.Value, out result))
      return result;
  }
  return null;
}

[TestMethod]
public void TestThis()
{
  Assert.AreEqual(15, ParseAnInt("15 person"));
  Assert.AreEqual(15, ParseAnInt("person 15"));
  Assert.AreEqual(15, ParseAnInt("person15"));
  Assert.AreEqual(15, ParseAnInt("15person"));

  Assert.IsNull(ParseAnInt("nonumber"));
}

Метод возвращает значение null, если число не найдено - он также обрабатывает случай, когда число вызывает переполнение целого числа.

Чтобы уменьшитьвероятность переполнения вы могли бы вместо этого использовать long.TryParse

В равной степени, если вы ожидаете несколько групп цифр, и вы хотите проанализировать каждую группу как дискретный номер, который вы могли бы использовать Regex.Matches - который вернет перечисляемыйвсех совпадений во входной строке.

2 голосов
/ 21 июня 2011

Используйте что-то вроде этого:

Regex r = new Regex("\d+");
Match m = r.Match(yourinputstring);

if(m.Success)
{
     Dosomethingwiththevalue(m.Value);
}
0 голосов
/ 21 июня 2011

Поскольку все используют Regex для извлечения чисел, вот способ Linq сделать это:

string input = "15person";
string numerics = new string(input.Where(Char.IsDigit).ToArray());
int result = int.Parse(numerics);

Просто для полноты картины это, вероятно, не слишком изящно.Что касается комментария Джеймса, он вернет 151314 , когда пройдено 15per13so14n .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...