将字符串与整数范围进行比较

时间:2019-09-26 09:09:24

标签: c# string char int

我有两个整数,例如4和11,并且我有一个字符串,例如Month04

我希望能够将该字符串与11到4之间的数字范围进行比较。

因此,以其他方式产生的循环(如果Month04.contains(11,10,9,8,7,6,5,4)然后

我该如何优雅地解决?

致谢

5 个答案:

答案 0 :(得分:2)

您可以使用any()检查字符串中是否存在数字,并使用Enumerable.Range()创建数字列表

string month = "Month04";
int num1 = 4;
int num2 = 11;

IEnumerable<int> numbersList = Enumerable.Range(num1, num2 - num1 + 1) ;
if (numbersList.Any(x => month.Contains(x.ToString())))
{
    // then
}

答案 1 :(得分:1)

我建议您为此创建一个通用方法:

public static bool CheckNameInRangeOfIntegers(int lowerBound, int upperBound, string inputString)
{
    List<int> rangeOfIntegers=Enumerable.Range(lowerBound,(upperBound-lowerBound + 1)).ToList();
    return rangeOfIntegers.Any(x=>inputString.Contains(x.ToString()));      
}

Example可以称为:

Console.WriteLine(CheckNameInRangeOfIntegers(4,11,"Month4")); // true
Console.WriteLine(CheckNameInRangeOfIntegers(4,11,"Month1")); // false

请注意:请注意您的情况,如果使用.Any()后跟.Contains()进行处理,则在某些情况下会遇到麻烦,例如lowerBound = 1,{ {1}}和uppeBound=10

答案 2 :(得分:0)

如果您的所有月份都以数字结尾,那么您可以尝试以下操作,

int startIndex = 4;  //I used variables to define starting index and end index
int endIndex = 11;

List<int> numbers = Enumerable.Range(startIndex, (endIndex-startIndex + 1)).ToList();
if (numbers.Any(x => "Month04".EndsWith(x.ToString())))
{
    //Your business logic
}

答案 3 :(得分:0)

这是使用正则表达式模式\d+的另一个示例,它将匹配字符串中的每个数字组(在这种情况下为04)。然后,我们可以将这些匹配项转换为整数,最后,如果两个整数集合之间存在任何匹配值,Linq表达式Intersect().Any()将返回true

string s = "Month04";
Regex pattern = new Regex(@"\d+");
var numbersInString = pattern.Matches(s).Cast<Match>().Select(x = int.Parse(x.Value));

int lowerBound = 4;
int upperBound = 11;
var range = Enumerable.Range(lowerBound, upperBound - lowerBound + 1);

if (numbersInString.Intersect(range).Any())
{
    //Match
}

答案 4 :(得分:0)

这种方式:

int[] numbers = new int[] { 11, 10, 9, 8, 7, 6, 5, 4 };
string str = "Month04";

int number = int.Parse(str.Replace("Month", ""));
if (numbers.Contains(number))
{
    Console.WriteLine("YEEE!");
}