Предполагая, что вход может содержать следующие категории:
null
сек
- Пустых строк
- Строки только с буквенными символами
- Строки со смешанными алфавитным и цифровыми символами
- струн только числовым символы
Вы хотите ввести метод, который извлекает число, если таковые имеются, или возвращает осмысленное значение, если нет:
private static int? ParseStringContainingNumber(string input)
{
if (String.IsNullOrEmpty(input))
{
return null;
}
var numbersInInput = new String(input.Where(Char.IsDigit).ToArray());
if (String.IsNullOrEmpty(numbersInInput))
{
return null;
}
int output;
if (!Int32.TryParse(numbersInInput, out output))
{
return null;
}
return output;
}
Обратите внимание, что не все символы, для которых Char.IsDigit
возвращает true
могут быть разобраны Int32.Parse()
, следовательно, в TryParse
.
Затем вы можете подать свой список к этому методу:
var parsedInts = testData.Select(ParseStringContainingNumber)
.Where(i => i != null)
.ToList();
И делать все, что вы хотите с parsedInts
списка, как вызов IEnumerable<T>.Max()
на него.
со следующими данными испытания:
var testData = new List<string>
{
"۱", // Eastern Arabic one, of which Char.IsDigit returns true.
"123",
"abc456",
null,
"789xyz",
"foo",
"9bar9"
};
Это возвращает:
123
456
789
99
Особенно обратите внимание на последний случай.
Что делать, если строка «55 штук 66», в чем должен состоять анализ 'int'? – juharr
Хороший вопрос, но в этом случае мне не о чем беспокоиться. Только когда-либо будет моим материалом1, stuff99 и т. Д. – Hardgraf
Список и части Linq не имеют значения. Те же правила применяются к одной строке. См. Например [Найти и извлечь номер из строки] (http://stackoverflow.com/questions/4734116/find-and-extract-a-number-from-a-string), [Сплит числовая часть из буквенно-цифровой строки используя C#] (http://stackoverflow.com/questions/19288312/split-numeric-part-from-alphanumeric-string-using-c-sharp), [Извлечь числа из строки, чтобы создать только цифру) (http://stackoverflow.com/questions/11002527/extract-numbers-from-string-to-create-digit-only-string) и так далее. – CodeCaster