在c#中的点后找到一个整数

use*_*904 0 c# int converter

我逐行读取文件,我想将一些值转换为整数.其中一行文件是92.44.12.5/28,我想将5转换为整数.我能够转换到12但它没有转换为5.

string[] ip1 = line.Split('.');
int [] ipArray = Array.ConvertAll(ip1[2].Split(),Int32.Parse);
Run Code Online (Sandbox Code Playgroud)

我的代码出了什么问题?

Tim*_*ter 5

您可以使用LINQ + int.Parse:

int[] ipArray = lines
    .Select(l => int.Parse(l.Split('/')[0].Split('.').Last())); 
    .ToArray(); 
Run Code Online (Sandbox Code Playgroud)

这假设格式是严格的,否则你得到一个例外int.Parse.

这是一个更安全的版本:

int ip = 0;
int[] ipArray = lines
    .Where(l => l.Contains('/') && l.Contains('.'))
    .Select(l => l.Trim().Split('/')[0].Split('.').Last())
    .Where(i => int.TryParse(i, out ip))
    .Select(i => ip)
    .ToArray(); 
Run Code Online (Sandbox Code Playgroud)

如果你想找到所有IP的所有4个数字,那么每一行都有一个数组:

int[][] allIPs = lines
    .Where(l => l.Contains('/') && l.Contains('.'))
    .Select(l => l.Trim().Split('/')[0].Split('.'))
    .Where(split => split.Length == 4 && split.All(str => str.All(Char.IsDigit)))
    .Select(split => Array.ConvertAll(split, int.Parse))
    .ToArray(); 
Run Code Online (Sandbox Code Playgroud)

请注意,这不兼容IPv6;)