Есть ли эквивалент JavaScript parseInt в C #?

Мне было интересно, собрал ли кто-нибудь что-то или что-то подобное JavaScript parseInt для C #.

В частности, я хочу взять строку, например:

123abc4567890cs prettyprint prettyprinted ">123

и возвращает только первое действительное целое число

public static int ParseInteger( object oItem )
    {
        string sItem = oItem.ToString();

        sItem = Regex.Replace( sItem, @"([^d])*", "" );

        int iItem = 0;

        Int32.TryParse( sItem, out iItem );

        return iItem;
    }

У меня есть статический метод, который я использовал, который будет возвращать только числа:

ParseInteger( "123abc4567890" );

Вышеизложенное:

1234567890

и верните меня

foreach (Match match in Regex.Matches(input, @"^d+"))
{
  return int.Parse(match.Value);
}

Я не уверен, возможно ли это сделать с регулярным выражением, или если есть лучший способ захватить только первое целое из строки.

c#,javascript,integer,parseint,

10

Ответов: 7


16 принят

Вы близки.

Вы, вероятно, просто хотите:

ParseInteger

9

Вот полный пример. Он будет генерировать исключение, если вы не дадите ему допустимую строку - вы можете изменить это поведение, не явно бросая исключение int.TryParseи используя вместо этого.using System; using System.Text; using System.Text.RegularExpressions; class Test { static void Main(string[] args) { Check("1234abc", 1234); Check("-12", -12); Check("123abc456", 123); } static void Check(string text, int expected) { int actual = ParseInteger(text); if (actual != expected) { Console.WriteLine("Expected {0}; got {1}", expected, actual); } } private static readonly Regex LeadingInteger = new Regex(@"^(-?d+)"); static int ParseInteger(string item) { Match match = LeadingInteger.Match(item); if (!match.Success) { throw new ArgumentException("Not an integer"); } return int.Parse(match.Value); } }

Обратите внимание, что он также позволяет вести указатель, но не ведущий @ "^ ([^ d] +)? (+ | -)? D +". (Опять же, легко изменить.)

Также обратите внимание, что хотя у меня есть три тестовых примера для успешных ситуаций, у меня нет никаких тестовых случаев для отказа.

Наконец, он не будет соответствовать «abc123def». Если вы хотите, удалите ^ из регулярного выражения.

asb12354

2

Небольшое изменение в отличном решении Jon Skeet в порядке.

Я бы изменил регулярное выражение на (как упоминал Джон):

12354

Это позволяет использовать лидирующие символы перед первым вводом цифры
(например, +-> -) и обе подписанные целочисленные случаи (например, +или -)


1
    public static int ParseInteger( object oItem )
    {
            int iItem = 0;
            if (oItem != null) {
                    Int32.TryParse( Regex.Match( oItem.ToString(), @"d+" ).Value, out iItem );
            }
            return iItem;
    }

0

Вы можете использовать этот RegEx (« A d +») для поиска чисел в начале строки.

Затем вы можете использовать int.Parse () для преобразования этой строки в фактическое целое число.

C #, JavaScript, целое число, ParseInt,
Похожие вопросы