簡體   English   中英

在C#中是否有等同於JavaScript的parseInt?

[英]Is there an equivalent to JavaScript parseInt in C#?

我想知道是否有人把一些東西放在一起或者已經看到了與C#的JavaScript parseInt相當的東西。

具體來說,我希望采取如下字符串:

123abc4567890

並僅返回第一個有效整數

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);
}

這是一個完整的例子。 如果你沒有給它一個有效的字符串,它將拋出一個異常 - 你可以通過不在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);
    }
}

Jon Skeet的優秀解決方案略有改變。

我會將正則表達式更改為(如Jon所述):

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

這允許在第一次出現數字之前引導字符的情況
(例如, asb12354 - > 12354 )和兩個有符號整數的情況(例如+-

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

您可以使用此RegEx(“\\ A \\ d +”)在字符串的開頭查找數字。

然后,您可以使用int.Parse()將該字符串轉換為實際的整數。

你不必編寫自己的int解析函數!!!!

我知道這個帖子很老了。 但有一些簡單的方法可以做到這一點:

int.Parse(urString);
use short.Parse(urString); //if you want a short

或者://根據您的情況使用這些:

Convert.ToInt16();
Convert.ToInt32();
Convert.ToInt64();

注意:
我正在回答您的主題問題“在C#中是否存在與JavaScript parseInt相同的內容?”,只是給您一些想法,而不是為您編寫代碼。 您需要先對“字母字符”進行過濾,您可以使用正則表達式或簡單的字符串。替換,或由您決定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM