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

2voto

marco-fiset Points 844
public int GetNumber(string input)
{
    string result = "";

    foreach (Char c in input)
    {
        if (Char.IsDigit(c))
            result += c;
    }

    return Convert.ToInt32(result);
}

public string GetCode(string input)
{
    string result = "";

    foreach (Char c in input)
    {
        if (!Char.IsDigit(c))
            result += c;     // or return the char if you want only the first one.
    }

    return result;
}

Je n'ai pas testé, mais il me semble que c'est le meilleur moyen d'y parvenir. C'est aussi la méthode qui offre le plus de flexibilité par rapport aux autres réponses.

1voto

Nicholas Carey Points 24614

Voilà :

public class NumberSuffixParser
{
    private static readonly Regex rxPattern = new Regex( @"^(?<number>\d+(\.\d+)?)(?<suffix>\p{L}+)$" , RegexOptions.IgnoreCase|RegexOptions.ExplicitCapture ) ;

    public void Parse( string value , out decimal number , out string suffix )
    {
        if ( value == null ) throw new ArgumentNullException("value") ;
        Match match = rxPattern.Match( value ) ;
        if ( ! match.Success ) throw new ArgumentOutOfRangeException("value") ;
        number = decimal.Parse( match.Groups["number"].Value ) ;
        suffix =                match.Groups["suffix"].Value   ;
        return ;
    }

    public decimal ParseNumber( string value )
    {
        decimal number ;
        string  suffix ;
        Parse( value , out number , out suffix ) ;
        return number ;
    }

    public string ParseSuffix( string value )
    {
        decimal number ;
        string  suffix ;
        Parse( value , out number , out suffix ) ;
        return suffix ;
    }

}

Une autre approche, un peu plus simpliste, mais assez souple, suit. Elle analysera volontiers des éléments comme '789xyz', '1234' ou 'abcde'. Si elle ne trouve pas de préfixe entier, elle renvoie 0. Le suffixe est ce qui suit le préfixe entier : si elle ne trouve pas de suffixe, elle renvoie nil ('').

public static void Parse( string value , out int number , out string suffix )
{
  number = 0 ;
  int i = 0 ;
  for ( i = 0 ; i < value.Length && char.IsDigit( value[i] ) ; ++i )
  {
     number *= 10 ;
     number += ( value[i] - '0' ) ;
  }
  suffix = value.Substring(i) ;
  return ;
}

0voto

Eder Points 857

Vous pouvez essayer quelque chose comme ça :

static string getNumber(String str)
{
    StringBuilder sb = new StringBuilder();
    foreach (char chr in str)
    {
        try
        {
            int x = int.Parse(chr.ToString());
            sb.Append(chr);
        } catch (Exception ex) {
            return sb.ToString();
        }
    }

    return null;
}

static string getCode(String str)
{
    StringBuilder sb = new StringBuilder();
    foreach (char chr in str)
    {
        try
        {
            int x = int.Parse(chr.ToString());
        }
        catch (Exception ex)
        {
            sb.Append(chr);
        }
    }

    return sb.ToString();
}

// 95
Console.WriteLine(getNumber("95d"));
// a
Console.WriteLine(getCode("95d"));

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