Нет такой функции, по крайней мере, я не знаю.Но одним из методов будет использование регулярного выражения для удаления всего, что не является числом:
using System;
using System.Text.RegularExpressions;
int result =
// The Convert (System) class comes in pretty handy every time
// you want to convert something.
Convert.ToInt32(
Regex.Replace(
"12ACD", // Our input
"[^0-9]", // Select everything that is not in the range of 0-9
"" // Replace that with an empty string.
));
Эта функция выдаст 12
для 12ABC
, поэтому, если вам понадобится обрабатывать отрицательные значенияномера, вам нужно другое решение.Это также небезопасно, если вы передадите его только не цифрами, это даст FormatException
.Вот некоторые примеры данных:
"12ACD" => 12
"12A5" => 125
"CA12A" => 12
"-12AD" => 12
"" => FormatException
"AAAA" => FormatException
Немного более многословным, но более безопасным подходом будет использование int.TryParse()
:
using System;
using System.Text.RegularExpression;
public static int ConvertToInt(String input)
{
// Replace everything that is no a digit.
String inputCleaned = Regex.Replace(input, "[^0-9]", "");
int value = 0;
// Tries to parse the int, returns false on failure.
if (int.TryParse(inputCleaned, out value))
{
// The result from parsing can be safely returned.
return value;
}
return 0; // Or any other default value.
}
Некоторые примеры данных снова:
"12ACD" => 12
"12A5" => 125
"CA12A" => 12
"-12AD" => 12
"" => 0
"AAAA" => 0
Или, если вы хотите, чтобы в строке было только число first , в основном останавливаясь при встрече с чем-то, что не является цифрой, мы внезапно также можем легко обработать отрицательные числа:
using System;
using System.Text.RegularExpression;
public static int ConvertToInt(String input)
{
// Matches the first numebr with or without leading minus.
Match match = Regex.Match(input, "-?[0-9]+");
if (match.Success)
{
// No need to TryParse here, the match has to be at least
// a 1-digit number.
return int.Parse(match.Value);
}
return 0; // Or any other default value.
}
И снова мы проверяем это:
"12ACD" => 12
"12A5" => 12
"CA12A" => 12
"-12AD" => -12
"" => 0
"AAAA" => 0
В целом, если мы говорим о пользовательском вводе, я бы вообще не принял недопустимый ввод, только используя int.TryParse()
без некоторыхдополнительная магия и при неудаче информирование пользователя о том, что ввод был неоптимальным (и, возможно, повторный запрос действительного числа).