检查第3位的整数是否为5

时间:2014-03-27 22:16:10

标签: c# exception integer

我试图想出一个表达式,如果从右到左的第三个数字是5,则检查给定的整数。 到目前为止我管理的是:

string input = "5";

if (Regex.IsMatch(input[2].ToString(), "[5]"))
{
    System.Console.WriteLine("yes");
}
else
    System.Console.WriteLine("no");

遇到2个问题:

首先,它从左到右计数,而不是从右到左计数 第二个当数字小于3位时,就像在这种情况下返回超出范围的例外。

6 个答案:

答案 0 :(得分:9)

使用数字方式。如果数字大于99且n是整数,则使用

(n / 100) % 10 == 5

n / 100删除最后两位数(整数除法截断),% 10提取最右边的数字。检查它是否为5。

它比使用正则表达式快得多。

答案 1 :(得分:1)

Bathsheba的回答要好得多,但如果您想使用正则表达式,我相信这个符合您的需求:^\d+(?:[5](\d){2})$

答案 2 :(得分:1)

参考@Bathsheba概念,

(n % 1000) / 100 == 5

可以做同样的事情。

(n % 1000)从右到左最多保留3位数字

/100取第3位

答案 3 :(得分:0)

是的RegEx并不是我在这里考虑的事情。由于有一个聪明的非转换答案,我将只提供转换为字符串的最简单答案;

  if (myInt.ToString().Length >= 3 && myInt.ToString()[2] == '5')
       //it's good
  else
      // it's bad

因为C#中的复合表达式短路,如果不担心得到IndexOutOfRangeException

,我可以同时使用这两个语句

答案 4 :(得分:0)

因为问题是:

  

从右到左

if (myInt.ToString().Length >= 3 && myInt.ToString()[myInt.ToString().Length - 3] == '5')
   //it's good
else
   //it's bad

答案 5 :(得分:0)

Console.Write(“输入数字:”);

            long n = long.Parse(Console.ReadLine());
            bool result = false;

            if ((n % 1000) / 100 == 5)
            {
                result = true;
            }
            Console.WriteLine(result);