0

我有一个字符串,其中数据以这种格式加载。“float;#123456.0300000” 我只需要从中提取 123456.03 并修剪所有其他开始和结束字符。可能是我缺少的非常基本的东西,请让我知道我该怎么做。谢谢。

4

2 回答 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 回答