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 に答える