[英]Extracting a substring of variable length from a string
我需要使用c#和.NET從字符串中提取可變長度的十進制數。 輸入字符串類似於$PTNTHPR,352.5,N,2.3,N,4.6,N,16*
。 我需要第一次出現十進制數,即352.5部分。 數值范圍從0.0
到360.0
,我需要從該字符串中獲取該數字。
我進行了很多搜索,並找到了固定長度子字符串的解決方案,但在這里我要提取可變長度。 我尚未嘗試任何代碼。
如果始終采用這種格式,則可以使用String.Split和decimal.Parse
var data = @"$PTNTHPR,352.5,N,2.3,N,4.6,N,16*";
var d = decimal.Parse(data.Split(new[]{','})[1]);
Console.WriteLine(d);
這只是指導您的示例代碼。 您應該為此添加其他異常處理邏輯,還要考慮使用小數。TryParse
如果要查找十進制值的第一個出現,請分割字符串並逐個解析它們。
var data = @"$PTNTHPR,352.5,N,2.3,N,4.6,N,16*";
var splited = data.Split(new[]{','});
decimal? value = null;
foreach (var part in splited)
{
decimal parsed;
if (decimal.TryParse(part, out parsed))
{
value = parsed;
break;
}
}
Console.WriteLine(value);
第一次出現在任何令牌中? 使用String.Split
將它們分開,然后使用LINQ查找第一個。 您可以使用decimal.TryParse
來檢查其是否可解析:
decimal? firstParsableToken = "$PTNTHPR,352.5,N,2.3,N,4.6,N,16*".Split(',')
.Select(s => s.TryGetDecimal(NumberFormatInfo.InvariantInfo))
.FirstOrDefault(d => d.HasValue);
用這個簡單的擴展方法將其解析為decimal?
:
public static decimal? TryGetDecimal(this string item, IFormatProvider formatProvider = null, NumberStyles nStyles = NumberStyles.Any)
{
if (formatProvider == null) formatProvider = NumberFormatInfo.CurrentInfo;
decimal d = 0m;
bool success = decimal.TryParse(item, nStyles, formatProvider, out d);
if (success)
return d;
else
return null;
}
如果字符串始終用逗號分隔,是否可以不使用string.Split()獲取每個部分,然后使用double.TryParse()測試該部分是否為數字?
public static class Helper
{
public static string MyExtract(this string s)
{
return s.Split(',').First(str => Regex.IsMatch(str, @"[0-9.,]"));
}
}
像這樣使用它: string str = "$PTNTHPR,352.5,N,2.3,N,4.6,N,16*".MyExtract();
然后根據需要將其轉換為雙精度/十進制。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.