我有以下字符串:
string value = "123.456L";
将此字符串解析为字符串和double的最佳方法是什么:
double number = 123.456;
string measure = "L"
我们还可以拥有其他内容,例如oz
,m/s
,liter
,kilograms
等
答案 0 :(得分:8)
假设度量单位始终表示为字符串后面的单个字符,您可以这样做:
string value = "123.456L";
var pos = value.LastIndexOfAny("0123456789".ToCharArray());
double number = double.Parse(value.Substring(0, pos+1));
string measure = value.Substring(pos+1);
答案 1 :(得分:5)
根据解释输入的评论,我会使用正则表达式。
double number = double.Parse(Regex.Match(value, @"[\d.]+").Value);
string measure = value.Replace(number.ToString(), "");
正则表达式[\d.]
将匹配任意数字或.
,+
表示必须为1个或多个匹配。
答案 2 :(得分:1)
我会这样做:
public bool TryParseUnit ( string sValue, out double fValue, out string sUnit )
{
fValue = 0;
sUnit = null;
if ( !String.IsNullOrEmpty ( sValue ) )
{
sUnit = GetUnit ( sValue );
if ( sUnit != null )
{
return ( Double.TryParse ( sValue.Substring ( sValue.Length - sUnit.Length ),
out fValue );
}
}
return ( false );
}
private string GetUnit ( string sValue )
{
string sValue = sValue.SubString ( sValue.Length - 1 );
switch ( sValue.ToLower () )
{
case "l":
return ( "L" );
}
return ( null );
}
我知道它比其他答案更复杂,但这样你也可以在解析过程中验证数据并丢弃无效输入。
答案 3 :(得分:1)
你可以使用正则表达式
using System.Text.RegularExpression;
Regex reg = new Regex(@"([\d|\.]*)(\w*)");
string value = "123.4L";
MatchCollection matches = reg.Matches(value);
foreach (Match match in matches)
{
if (match.Success)
{
GroupCollection groups = match.Groups;
Console.WriteLine(groups[1].Value); // will be 123.4
Console.WriteLine(groups[2].Value); // will be L
}
}
那么这将做的是寻找0或更多数字或“。”然后将它们分组,然后查找任何字符(0或更多)。然后,您可以从每个匹配中获取组并获取值。如果您想要更改测量类型,这将起作用,如果您没有小数点也可以。
编辑:请务必注意,必须将组[1]用于第一组,将组[2]用于第二组。如果您使用组[0],它将显示原始字符串。
答案 4 :(得分:1)
您可能需要查看GitHub和NuGet上的Units.NET。它支持解析不同文化中的缩写,但仍然在我的TODO list上添加对解析数字和单位组合的支持。我已经在相关项目中完成了这项工作,因此应该直接添加。
2015年4月更新:现在,您可以按Length.Parse("5.3 m");
分析单位和值,并为其他单位解析类似内容。
答案 5 :(得分:0)
简单地说:寻找0..9或者所有字符。并将它们修剪为一个新的字符串,然后将最后一部分放在第二个字符串中我可以在一分钟内给出代码。
编辑:是的,我的意思是数字0-9,更正了它。但是更容易获得最后一个数字的索引,并在修剪之前忽略它们。
答案 6 :(得分:0)
你可以试试这个:
string ma = Regex.Match(name, @"((\d\s)|(\d+\s)|(\d+)|(\d+\.\d+\s))(g\s|kg\s|ml\s)").Value;
这将匹配:
40g,40g,12.5g,1kg,2kg,150ml ....