парсинг строки в int / long с использованием строк нестандартного формата - PullRequest
4 голосов
/ 27 февраля 2012

В C # .Net вот простой пример того, как форматировать числа в строки, используя строки произвольного формата: (пример взят из: http://www.csharp -examples.net / string-format-int / )

String.Format("{0:+### ### ### ###}", 447900123456); // "+447 900 123 456"
String.Format("{0:##-####-####}", 8958712551);       // "89-5871-2551"

Есть ли способ преобразовать эту отформатированную строку обратно в long / integer?Есть ли способ сделать это:

long PhoneNumber = Int32.Parse("89-5871-2551", "{0:##-####-####}");

Я видел, что DateTime имеет метод ParseExact, который может сделать эту работу хорошо.Но я не видел ничего подобного для int / long / decimal / double.

Ответы [ 3 ]

4 голосов
/ 27 февраля 2012

Вы можете вывести все нечисловые числа, и у вас останется строка чисел, которую вы можете проанализировать.

var myPhoneNumber = "89-5871-2551";
var strippedPhoneNumber = Regex.Replace(myPhoneNumber, @"[^\d]", "");
int intRepresentation;

if (Int32.TryParse(strippedPhoneNumber, out intRepresentation))
{
    // It was assigned, intRepresentation = 8958712551
    // now you can use intRepresentation.

} else {
    // It was not assigned, intRepresentation is still null.
}
1 голос
/ 27 февраля 2012

Ну, вы всегда можете сделать

long PhoneNumber = Int32.Parse("89-5871-2551".
                Replace(new char[]{'-','+',whatever..}).Trim());

Кстати, учитывая, что вы анализируете строку, полученную от некоторого IO, я бы предложил использовать более безопасный (с точки зрения преобразования) Int32.TryParse метод.

Способ, подобный описанному вами , на самом деле не существует.

0 голосов
/ 27 февраля 2012

Просто отмените все нечисловые символы, а затем проанализируйте эту строку.

...