3 votes

Comment puis-je obtenir un entier et un caractère séparément dans une chaîne aussi simple ?

J'ai des chaînes de caractères comme : "7j" , "5m" , "95j" etc.

J'ai besoin de trouver un moyen simple pour pouvoir obtenir séparément les entiers et les chars à la fin.

Comment puis-je y parvenir ?

int number = GetNumber("95d"); //should return 95
char code = GetCode("95d"); // should return d

5voto

Joe Points 34413

Ce sont les expressions :

[^\d]+ <- not digit
\d+ <- digits

EDIT

    static int GetNumber(string text)
    {
        string pat = @"\d+";
        int output;
        // Instantiate the regular expression object.
        Regex r = new Regex(pat, RegexOptions.IgnoreCase);
        Match m = r.Match(text);
        if (int.TryParse(m.Value, out output))
            return output;
        else
            return int.MinValue; // something unlikely
    }

    static char GetChar(string text)
    {
        string pat = @"[^\d]";
        int output;
        // Instantiate the regular expression object.
        Regex r = new Regex(pat, RegexOptions.IgnoreCase);
        Match m = r.Match(text);
        return m.Value.Length == 1 ? m.Value[0] : '\0';
    }

Il suffit de créer cette RegExp une fois, et non à chaque appel de méthode.

4voto

Brandon Moretz Points 4274

Une alternative simple aux solutions RegEx.

string letters = Seperate( "95d",  c => Char.IsLetter( c ) );
string numbers = Seperate( "95d", c => Char.IsNumber( c ) );

static string Seperate( string input, Func<char,bool> p )
{
    return new String( input.ToCharArray().Where( p ).ToArray() );
}

Vous pourriez faire de "Seperate" une méthode d'extension sur les chaînes de caractères pour rendre les choses un peu plus propres.

3voto

Jayanta Dey Points 307
string s = "95d";
int number = Int32.Parse(s.Substring(0, s.Length - 1));
char code = Char.Parse(s.Substring(s.Length - 1));

2voto

Donut Points 32892

Une regex est probablement inutile - les exemples que vous avez prouvés ont un format très simple et cohérent. Essayez les fonctions suivantes comme point de départ :

public int GetNumber(string input)
{
   return int.Parse(input.Substring(0, input.Length - 1));
}

public char GetCode(string input)
{
   return input.Last();
}

Je dis "comme point de départ" parce que vous devrez tenir compte des cas limites - comment allez-vous gérer les chaînes vides ? Une chaîne peut-elle se terminer par plus d'une lettre et, si c'est le cas, comment la gérer ? J'espère que ces exemples vous donneront envie de vous lancer.

2voto

Łukasz Wiatrak Points 1351
    private char GetChar(string t)
    {
        return t.Substring(t.Length - 1, 1)[0];
    }

    private int GetNumber(string t)
    {
        return Int32.Parse(t.Substring(0, t.Length - 1));
    }

Edit : deuxième version de la fonction GetNumber avec 'TryParse' au lieu de 'Parse' :

    private int GetNumber(string t)
    {
        int result;
        if(Int32.TryParse(t.Substring(0, t.Length - 1), out result) == false)
        {
             // you can handle here incorrect 't' value if you want
        }
        return result;
    }

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