从字符串中提取多个整数

时间:2020-07-29 07:53:17

标签: c#

我有一个包含以下几行的文件:

29x13x26
11x11x14
27x2x5
6x10x13
15x19x10
26x29x15
8x23x6
17x8x26
20x28x3
23x12x24
11x17x3
19x23x28
25x2x25
1x15x3
25x14x4

我正在将文件解析为列表。我想做的只是从每一行中获取数字。

例如,在第一行中,我想乘29、13、26

这是我的代码

    //Get line by line all gift sizes from txt and add them to a list
    foreach (string line in File.ReadAllLines("GiftSizes.txt"))
    {
        //Insert values into list
        dimensionsList.Add(line);
    }

    foreach(var giftDimension in dimensionsList){
               //get the numbers from each line
           }

3 个答案:

答案 0 :(得分:2)

使用string.Split,它将把您的字符串分成多个块并省略定界符-在您的情况下为字符'x'

//Get line by line all gift sizes from txt and add them to a list
foreach (string line in File.ReadAllLines("GiftSizes.txt"))
{
    //Insert values into list
    dimensionsList.Add(line);
}

foreach(var giftDimension in dimensionsList)
{
    int[] numbers = giftDimension.Split('x').Select(x => Convert.ToInt32(x)).ToArray();
}

答案 1 :(得分:1)

使用正则表达式:

static readonly _threeDigits = new Regex( @"^(\d+)x(\d+)x(\d+)$", RegexOptions.IgnoreCase | RegexOptions.Compiled );

static IEnumerable<(Int32 x, Int32 y, Int32 z)> ReadValues( String fileContents )
{
    MatchCollection matches = _threeDigits.Match( fileContents );
    foreach( Match m in matches )
    {
        yield return (
            x: Int32.Parse( m.Groups[1], NumberStyles.Integer, CultureInfo.InvariantCulture ), // Groups start at [1], not [0].
            y: Int32.Parse( m.Groups[2], NumberStyles.Integer, CultureInfo.InvariantCulture  ),
            z: Int32.Parse( m.Groups[3], NumberStyles.Integer, CultureInfo.InvariantCulture  )
        );
    }
}

static List<(Int32 x, Int32 y, Int32 z)> ReadValuesAsList( String fileContents )
{
    return ReadValuesAsList( fileContents ).ToList();
}

答案 2 :(得分:0)

您可以在字符串上使用分割功能

foreach(var giftDimension in dimensionsList) 
{
int[] numberArray=giftDimension.Split('x'); 
}
相关问题