Domanda

Mi chiedevo se qualcuno aveva messo insieme qualcosa o avesse visto qualcosa di equivalente al parseInt JavaScript per C #.

In particolare, sto cercando di prendere una stringa del tipo:

123abc4567890

e restituire solo il primo numero intero valido

123

Ho un metodo statico che ho usato che restituirà solo i numeri:

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

È possibile che questo avrebbe portato:

ParseInteger( "123abc4567890" );

e ridammi

1234567890

Non sono sicuro se è possibile fare con un'espressione regolare, o se c'è un metodo migliore per afferrare solo il primo numero intero da stringa.

È stato utile?

Soluzione

Si è vicino.

Probabilmente si desidera solo:

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

Altri suggerimenti

Ecco un esempio completo. Sarà un'eccezione se non si dà una stringa valida -. È possibile modificare questo comportamento non buttare esplicitamente un'eccezione in ParseInteger, e l'utilizzo di int.TryParse invece

Si noti che consente a un leader - segno pure, ma non un leader +. (Anche in questo caso, facile da cambiare.)

Si noti inoltre che anche se ho avuto tre casi di prova per le situazioni di successo, non ho alcun casi di test per il fallimento.

Infine, non corrisponderà "abc123def". Se si desidera, rimuovere il ^ dal regex.

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

Un leggero cambiamento ad eccellente soluzione Jon Skeet è in ordine.

vorrei cambiare il regex per (come detto da Jon):

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

In questo modo per il caso di guidare personaggi in vista della prima occorrenza di una cifra
(Ad esempio, asb12354 -> 12354) e entrambi i casi interi firmati (ad esempio + o -)

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

È possibile utilizzare questo RegEx ( "\ A \ D +") per trovare i numeri all'inizio di una stringa.

È quindi possibile utilizzare int.Parse () per convertire la stringa in un intero reale.

int nr = Int32.Parse(yourstring);

NON c'è bisogno di scrivere la propria funzione di analisi int !!!!

So che questa discussione è piuttosto vecchio. ma ci sono un modo semplice per farlo:

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

Oppure: // usare quelli dipende dalla vostra situazione:

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

NOTA:
Io rispondo tua Topic Domanda "c'è un equivalente a JavaScript parseInt in C #?", Solo dare qualche idea, non scrivere il codice per voi. Hai bisogno di fare prima un filtraggio su 'caratteri alfabetici', lo si può fare con un'espressione regolare o una semplice String.Replace, o fino a voi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top