Phương pháp mở rộng để lấy tất cả các số dương có trong một chuỗi:
public static List<long> Numbers(this string str)
{
var nums = new List<long>();
var start = -1;
for (int i = 0; i < str.Length; i++)
{
if (start < 0 && Char.IsDigit(str[i]))
{
start = i;
}
else if (start >= 0 && !Char.IsDigit(str[i]))
{
nums.Add(long.Parse(str.Substring(start, i - start)));
start = -1;
}
}
if (start >= 0)
nums.Add(long.Parse(str.Substring(start, str.Length - start)));
return nums;
}
Nếu bạn muốn số âm cũng chỉ cần sửa đổi mã này để xử lý dấu trừ (-
)
Cho đầu vào này:
"I was born in 1989, 27 years ago from now (2016)"
Danh sách số kết quả sẽ là:
[1989, 27, 2016]