Удаление пробелов в строке

340
31 мая 2017, 02:42

Есть строка которую я хочу перевести в число(например String myString ="2 014"),но так как она имеет пробел выдаёт Exception. как можно в строке удалить пробел?

Answer 1

Можно вот так:

String myString = "2 01 4";
int count = int.Parse(myString.Replace(" ", string.Empty));
Answer 2

Метод 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);

Таким образом, можно очень гибко настраивать разбор строк.

Answer 3

В метод 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
Answer 4

Попробуйте так

string sNumber = "23 45 5558";
string number=null;
foreach (var item in sNumber.Split(' '))
 {
   number += item;
 }
int convertNumber = int.Parse(number);
Answer 5

Можно так:

int count = Convert.ToInt32(myString.Replace(" ", ""));
READ ALSO
WPF MVVM: поиск и scroll в listview

WPF MVVM: поиск и scroll в listview

Есть listviewОн забайдин с ObservableCollection<MyObject>

401
Как обрабатывать ботом сообщения -Telegram Bot Api C#

Как обрабатывать ботом сообщения -Telegram Bot Api C#

Как обрабатывать ботом сообщения, которые будут приходить, только тогдда, когда я запущу программу? Сейчас у меня так как на скрине, и когда...

255
Как сделать выравнивание в FrameworkElementFactory?

Как сделать выравнивание в FrameworkElementFactory?

Так не работает выравнивание:

208