我试图想出一个表达式,如果从右到左的第三个数字是5,则检查给定的整数。 到目前为止我管理的是:
string input = "5";
if (Regex.IsMatch(input[2].ToString(), "[5]"))
{
System.Console.WriteLine("yes");
}
else
System.Console.WriteLine("no");
遇到2个问题:
首先,它从左到右计数,而不是从右到左计数 第二个当数字小于3位时,就像在这种情况下返回超出范围的例外。
答案 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);