Существует ли эквивалент JavaScript parseInt в C#?

Просто поместите строки const в область действия файла в файле реализации, анонимное пространство имен не обязательно ограничивать их использование только этим классом.

Стандарт C ++ 003 C.1.2 Раздел 3: основные понятия

Change: A name of file scope that is explicitly declared const, and not explicitly declared extern, has internal linkage, while in C it would have external linkage

Примечание. Анонимное пространство имен помогает уменьшить конфликты имен.

10
задан Doozer Blake 10 June 2009 в 13:08
поделиться

5 ответов

Вы близко.

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

foreach (Match match in Regex.Matches(input, @"^\d+"))
{
  return int.Parse(match.Value);
}
17
ответ дан 3 December 2019 в 16:10
поделиться

Вот полный пример. Он вызовет исключение, если вы не укажете ему действительную строку - вы можете изменить это поведение, не выбрасывая явным образом исключение в ParseInteger , а вместо этого используя int.TryParse .

Обратите внимание, что он также позволяет использовать начальный знак -, но не +. (Опять же, легко изменить.)

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

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

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);
    }
}
9
ответ дан 3 December 2019 в 16:10
поделиться

Небольшое изменение в отличном решении Джона Скита необходимо.

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

@ "^ ([^ \ d] +)? (+ | -)? \ d + "

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

2
ответ дан 3 December 2019 в 16:10
поделиться
    public static int ParseInteger( object oItem )
    {
            int iItem = 0;
            if (oItem != null) {
                    Int32.TryParse( Regex.Match( oItem.ToString(), @"\d+" ).Value, out iItem );
            }
            return iItem;
    }
1
ответ дан 3 December 2019 в 16:10
поделиться

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

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

0
ответ дан 3 December 2019 в 16:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: