gpt4 book ai didi

c# - 从中间有非数字的字符串中解析数字

转载 作者:可可西里 更新时间:2023-11-01 08:14:12 28 4
gpt4 key购买 nike

我正在处理 .NET 项目,我试图仅解析字符串中的数值。例如,

string s = "12ACD";
int t = someparefun(s);
print(t) //t should be 12

几个假设是

  1. 字符串模式始终是数字后跟字符。
  2. 数字部分总是一位或两位数的值。

是否有任何 C# 预定义函数来解析字符串中的数值?

最佳答案

没有这样的功能,至少我不知道。但一种方法是使用正则表达式删除所有非数字的内容:

using System;
using System.Text.RegularExpressions;

int result =
// The Convert (System) class comes in pretty handy every time
// you want to convert something.
Convert.ToInt32(
Regex.Replace(
"12ACD", // Our input
"[^0-9]", // Select everything that is not in the range of 0-9
"" // Replace that with an empty string.
));

此函数将为 12ABC 生成 12,因此如果您需要能够处理负数,则需要不同的解决方案。它也不安全,如果你只传递非数字,它会产生一个 FormatException。以下是一些示例数据:

"12ACD"  =>  12
"12A5" => 125
"CA12A" => 12
"-12AD" => 12
"" => FormatException
"AAAA" => FormatException

更冗长但更安全的方法是使用 int.TryParse() :

using System;
using System.Text.RegularExpression;

public static int ConvertToInt(String input)
{
// Replace everything that is no a digit.
String inputCleaned = Regex.Replace(input, "[^0-9]", "");

int value = 0;

// Tries to parse the int, returns false on failure.
if (int.TryParse(inputCleaned, out value))
{
// The result from parsing can be safely returned.
return value;
}

return 0; // Or any other default value.
}

又是一些示例数据:

"12ACD"  =>  12
"12A5" => 125
"CA12A" => 12
"-12AD" => 12
"" => 0
"AAAA" => 0

或者,如果您只想要字符串中的第一个 数字,基本上在遇到非数字的情况下停止,我们突然间也可以轻松处理负数:

using System;
using System.Text.RegularExpression;

public static int ConvertToInt(String input)
{
// Matches the first numebr with or without leading minus.
Match match = Regex.Match(input, "-?[0-9]+");

if (match.Success)
{
// No need to TryParse here, the match has to be at least
// a 1-digit number.
return int.Parse(match.Value);
}

return 0; // Or any other default value.
}

我们再次测试它:

"12ACD"  =>  12
"12A5" => 12
"CA12A" => 12
"-12AD" => -12
"" => 0
"AAAA" => 0

总的来说,如果我们谈论用户输入,我会考虑根本不接受无效输入,只使用 int.TryParse() 而不使用一些额外的魔法,并在失败时通知用户输入不是最理想的(并且可能再次提示输入有效数字)。

关于c# - 从中间有非数字的字符串中解析数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3204673/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com