- - PR -
vb.netでの"."について
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-04-03 23:11
VB.NETにて"."を削除するコードを実装しているのですが
うまくいきません。 以下がコードです。 'textからsubstring()で一文字ずつ調べ、"."が出たらループを抜けます Dim text As String="3.5" Dim i As Integer = 0 Dim keisub As String While (text.Substring(i, i + 1) <> "." And i < text.Length - 1) keisub = keisub + text.Substring(i, i + 1) i += 1 End While これでkeisubには"3"が入るはずなのですが "."が一文字として取られておらず、".5"が一文字として 取られているみたいなんです。 なのでエラーが出て終了してしまいます。 IndexOf()で"."の位置を調べてみるとちゃんと1が返ってきます。 Length()でもちゃんと3が返ってきます。 原因が分かりません。 もしかしてsubstring()がそういう仕様なのでしょうか。 初歩的な質問なのですがどなたかアドバイス頂けないでしょうか。 よろしくおねがいします。 | ||||||||
|
投稿日時: 2005-04-03 23:24
unibon です。こんにちわ。
#最近 .NET のプログラムをやり始めた者です。
提示されたコードは全部見ていませんが、.NET の String クラスの substring メソッドの、(1から数えて)第2引数が、文字位置ではなく文字数なのですが、十中八九、そのためではないでしょうか?これは、勘違いし易い、分かりにくい仕様だと思います。Java や JavaScript にも同名のメソッドがあるのに、引数の意味が違うのは納得いかないです。 http://www.microsoft.com/japan/msdn/library/ja/cpref/html/frlrfSystemStringClassSubstringTopic2.asp | ||||||||
|
投稿日時: 2005-04-03 23:37
replace(text,".","")
じゃ駄目ですかね。 | ||||||||
|
投稿日時: 2005-04-03 23:41
諸農です。
文字列から全部の「.」を取り除くならString.Replace()を 使った方が便利ではないでしょうか。 文字列の先頭から検索して最初に出てきた「.」よりも前の 文字列を取得したいのであれば、IndexOf()を使って位置を 取得して、Substring()すればOKですね。 C#ですが、
みたいな感じになると思います。 #オン書きなのでコードは未検証です。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||
|
投稿日時: 2005-04-04 00:03
たくさんのアドバイスありがとうございます。
substring()の引数がVB.NETとJavaでは違うのですね。。。 第二引数に文字数の1を与えたらうまくいきました。 VB.NETについてもっと勉強します。ありがとうございました。 | ||||||||
|
投稿日時: 2005-04-04 09:06
Javaと違うのは仕方ないとしても、ちょっと気になったのは 「文字数の1を与える」というのは正確ではないと思います。 私の気の回しすぎならごめんなさい。 _________________ 諸農和岳 Powered by Turbo Delphi & Microsoft Visual Studio 2005 十兵衛@わんくま同盟 http://blogs.wankuma.com/jubei/ | ||||||||
|
投稿日時: 2005-04-05 05:29
> 私の気の回しすぎならごめんなさい。
私も気になるのですが、ソースを見ると、 > VB.NETにて"."を削除するコードを実装している のではなく、文字列の先頭から"."までを抽出する、のようです。 例: 3.5→3 13.67→13 0.1234→0 .456→空文字列? 1.2.3.4→1 で、いいのでしょうか?>delichoさん NAL-6295さんやJubeiさんが提示されたメソッドだと、次のようになります。 3.5→35 13.67→1367 0.1234→01234 .456→456 1.2.3.4→1234 もし、本当にやりたいことが「実数を整数化する」であれば、Mathクラスを使うのですが??? unibonさん> > Java や JavaScript にも同名のメソッドがあるのに、 > 引数の意味が違うのは納得いかないです。 これですね。STLのstringクラスでは、substrの引数はインデックスと文字数です。C→C++→.NET Framework(→Java)の私には、Javaの方が納得いかないです(^-^; _________________ | ||||||||
|
投稿日時: 2005-04-05 08:44
unibon です。こんにちわ。
たとえば、JavaScript だと、substr と substring があり、substr が文字数指定で substring がインデックス指定です。だから substring と名の付くものは、やっぱりインデックスでの指定であってほしいのです。 というか、そもそもフルスペル(substring)か単語の省略(substr)で、意味を違わせないでほしかったことを JavaScript に望みたかったです。 |