Есть строка которую я хочу перевести в число(например String myString ="2 014"
),но так как она имеет пробел выдаёт Exception. как можно в строке удалить пробел?
Можно вот так:
String myString = "2 01 4";
int count = int.Parse(myString.Replace(" ", string.Empty));
Метод int.Parse
имеет несколько перегрузок, принимающих стиль чисел и провайдер формата.
Итак, имеем строку с разделителем груп (тысяч):
String myString = "2 014";
В первую очередь, нужно указать стиль, разрешающий сепаратор групп:
int n = int.Parse(myString, NumberStyles.AllowThousands);
Это будет работать, если в текущей культуре используется именно пробел в качестве разделителя групп. Узнать его можно, например, так:
var ci = CultureInfo.CurrentCulture;
Console.WriteLine(ci.Name);
Console.WriteLine("'" + ci.NumberFormat.NumberGroupSeparator + "'");
В русской культуре, с именем ru-RU
это пробел по умолчанию. Но если приложение запущено на компьютере с другой культурой, то разделитель может быть другим. Скажем, в англоязычной en-US
это будет запятая: ,
.
Поэтому лучше не полагаться на культуру по умолчанию, а задать нужный провайдер формата.
int n = int.Parse(myString, NumberStyles.AllowThousands, new CultureInfo("ru-RU"));
в данном случае используется явное создание культуры ru-RU
.
Так как для разбора числа нужна лишь небольшая часть параметров культуры, то можно создать просто провайдер формата чисел:
NumberFormatInfo nfi = new NumberFormatInfo();
nfi.NumberGroupSeparator = " ";
int n = int.Parse(myString, NumberStyles.AllowThousands, nfi);
Тут явно задаётся пробел в качестве разделителя групп. Культура как таковая не используется.
Напоследок обращу внимание, что значения перечисления NumberStyles
можно комбинировать. Если, скажем, пробелы могут быть ещё и в начале и в конце разбираемой строки, то добавим:
var nfi = new NumberFormatInfo();
nfi.NumberGroupSeparator = " ";
var styles = NumberStyles.AllowThousands | NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite;
int n = int.Parse(myString, styles, nfi);
Таким образом, можно очень гибко настраивать разбор строк.
В метод Parse можно передать флаг (NumberStyles.AllowThousands) указывающий, что в переданной строке для разделения групп используется специальный символ, зависящей от установленной культуры.
Если текущая культура ru-RU
, то NumberGroupSeparator равен пробелу, поэтому код может выглядеть так:
var num = int.Parse("2 134", System.Globalization.NumberStyles.AllowThousands);
Чтобы сделать более независимое решение, третьим параметром в Parse
можно передать NumberFormatInfo
, в котором установить нужный разделитель, например так:
var num = int.Parse("2 134", System.Globalization.NumberStyles.AllowThousands, new System.Globalization.NumberFormatInfo() { NumberGroupSeparator = " " });
Что интересно, при выставлении данного флага, даже несмотря на значение свойства NumberGroupSizes задающего три цифры в группе, значение, в котором пробелами будет разделена каждая цифра - также будет корректно разобрано:
int.Parse("2 1 3 4", NumberStyles.AllowThousands, new NumberFormatInfo() { NumberGroupSeparator = " ", }) == 2134
Попробуйте так
string sNumber = "23 45 5558";
string number=null;
foreach (var item in sNumber.Split(' '))
{
number += item;
}
int convertNumber = int.Parse(number);
Можно так:
int count = Convert.ToInt32(myString.Replace(" ", ""));
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как обрабатывать ботом сообщения, которые будут приходить, только тогдда, когда я запущу программу? Сейчас у меня так как на скрине, и когда...