我有一个字符串,其中数据以这种格式加载。“float;#123456.0300000” 我只需要从中提取 123456.03 并修剪所有其他开始和结束字符。可能是我缺少的非常基本的东西,请让我知道我该怎么做。谢谢。
问问题
1894 次
2 回答
1
如果格式后面总是 float;#
跟着你想要的位,那么它相当简单:
// TODO: Validate that it actually starts with "float;#". What do you want
// to do if it doesn't?
string userText = originalText.Substring("float;#".Length);
// We wouldn't want to trim "300" to "3"
if (userText.Contains("."))
{
userText = userText.TrimEnd('0');
// Trim "123.000" to "123" instead of "123."
if (userText.EndsWith("."))
{
userText = userText.Substring(0, userText.Length - 1);
}
}
但是你真的需要对格式有信心——不会有任何其他需要删除的东西,等等。
尤其:
- 您希望支持的最大小数位数是多少?
- 可能有数千个分隔符?
- 小数分隔符总是一个句点吗?
- 值可以为负吗?
- 显式前导
+
有效吗? - 您需要处理科学格式(1.234e5 等)吗?
- 可能有尾随字符吗?
- 尾随字符可能包含数字吗?
- 您需要处理非 ASCII 数字吗?
如果您需要比上面的代码更复杂的东西,您可能很想使用正则表达式,但在进一步深入之前,您真的想尽可能多地了解可能的输入。(我强烈建议为你能想到的每一种输入形式编写单元测试。)
于 2013-01-16T13:26:12.267 回答
0
为什么不这样做:
String s = "float;#123456.0300000";
int i = int.Parse(s.Substring(s.IndexOf('#') + 1));
我还没有测试过这个,但它应该很接近。
假设格式没有改变,只需找到'#'之后的字符并将其转换为int,这样你就失去了'.'之后的所有内容。
如果您需要它作为字符串,则只需调用 ToString 方法。
于 2013-01-16T13:27:03.217 回答