2 votes

Isoler int de string

J'ai une chaîne qui est un mot, puis =, puis un nombre.

Par exemple

"RefreshRate=75"

Je veux récupérer le nombre entier à la fin et le stocker dans un Int. Le programme utilise cette valeur qui est stockée dans un fichier ini, j'ai besoin d'isoler cette valeur car d'autres calculs de valeurs sont basés sur elle.

Comment cela peut-il être fait ?

Merci d'avance

Ooooopsss :

Désolé les gars, j'ai fait une erreur.

La chaîne de caractères est en fait au format "RefreshRate=numHz"... c'est-à-dire "RefreshRate=65Hz"... Je suis sûr que cela devrait fonctionner, mais j'obtiens "Incorrect input format error" car il ajoute également le Hz, et cela déclenche l'exception :s

8voto

Timwi Points 30896

C'est facile ! Il suffit d'utiliser une expression régulière !

var m = Regex.Match(input, @"=\s*(-?\d+)");
if (!m.Success)
    throw new InvalidOperationException(
        "The input string does not contain a number.");
return Convert.ToInt32(m.Groups[1].Value);

Cela permet d'extraire le premier nombre entier qui suit un = dans n'importe quelle chaîne de caractères. Par conséquent, si votre chaîne d'entrée est "Frequency2=47Hz" il retournera 47 .

6voto

AEMLoviji Points 1189
int i=Convert.ToInt32(st.Substring(st.IndexOf('=')+1))

5voto

Anthony Pegram Points 58528

Si vous êtes sûr le format est mot=valeur et n'est pas une variante, alors cela devrait fonctionner pour vous.

int value = int.Parse(line.Split('=').Last());

Edita: Pour faire face à votre blesse problème du hertz

int value = int.Parse(line.Split('=').Last().Replace("Hz", ""));

4voto

Aliostad Points 47792

Pourquoi pas :

    static int GetIntAfterEqual(string containsIntAfterEqual)
    {
        if(containsIntAfterEqual==null)
            throw new ArgumentNullException("containsIntAfterEqual");

        string[] splits = containsIntAfterEqual.Split('=');
        if (splits.Length == 2)
            return int.Parse(splits[1]);
        else
            throw new FormatException(containsIntAfterEqual);
    }

UPDATE : Vous avez dit que ça pouvait être "entryname=25hz". Cela devrait fonctionner dans les deux cas :

    static int GetIntAfterEqual(string containsIntAfterEqual)
    {
        if(containsIntAfterEqual==null)
            throw new ArgumentNullException();

        Match match = Regex.Match(containsIntAfterEqual, @"[\d\w]+=([\d]+)\w*");
        if(match.Success)
            return int.Parse(match.Groups[1].Value);
        else
            throw new FormatException(containsIntAfterEqual);
    }

2voto

Kirk Woll Points 34601

Une façon de procéder est d'utiliser string.Split :

int.Parse(s.Split("=")[1])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X