0

なぜこれがうまくいかないのか理解できません。

「。」を含む可変長の文字列を分析しようとしています。内側のどこかで、「。」を取り除きます。およびその前のすべての文字。これは、Web サービスを介して呼び出されます。

デバッグ中は、以下の最終行でブラウザ メッセージ「System.ArgumentOutOfRangeException: インデックスと長さは文字列内の場所を参照する必要があります。パラメータ名: 長さ」が表示されるまで正常に動作します。

誰でも思いつきましたか?

以下の Code1 は、eform から Web サービスに渡される入力変数です。

Dim CharNo As New Integer
CharNo = Code1.IndexOf(".")
MyCodebookValueStrip.o_Code1 = Code1.Substring(CharNo + 1, (Code1.Length - CharNo))
4

6 に答える 6

5

残りの文字列の長さの計算は正しくありません。もう 1 つ減算する必要があります。

Code1.Substring(CharNo + 1, Code1.Length - CharNo - 1)

2 番目のパラメーターを省略して、残りの文字列を取得することもできます。

Code1.Substring(CharNo + 1)
于 2012-07-13T14:19:58.173 に答える
1

おそらく、代替の非常に単純なアプローチを試すことができますか?

MyCodebookValueStrip.o_Code1 = Code1.Split(".").Last()

文字列にピリオドが含まれていることが確実な場合。それ以外の場合は、次を使用します。

MyCodebookValueStrip.o_Code1 = Code1.Split(".").LastOrDefault()

文字列にピリオドが含まれていない場合は、「Nothing」が返されます。

文字列に複数のピリオドが含まれている場合、文字列の最後のピリオドの後の部分文字列が返されます。ただし、それ以外のことを行う範囲はあります。たとえば、次のようになります。

"StringOne.StringTwo.StringThree".Split(".").First()

「StringOne」を提供します。

"StringOne.StringTwo.StringThree".Split(".").Last()

「StringThree」を提供します。

"StringOne.StringTwo.StringThree".Split(".").Skip(1).Take(1)

「StringTwo」を提供します。

このようなものを使用するには、System.Linq を参照してインポートする必要があります。つまり、.NET 3.5 以降を使用する必要があります。

于 2012-07-13T14:11:20.997 に答える
0

みんな、ありがとう。-1が必要だと気づいたはずです。ここには正解がたくさんあるので、「受け入れられた答え」として複数選択できるかどうかはわかりません。やってみます。どうもありがとう。

于 2012-07-13T14:31:07.950 に答える
0

問題は、開始インデックス ( CharNo + 1) に 1 を追加しているが、長さから 1 を引いていないことです。それを修正するには、次のように記述する必要があります。

Code1.Substring(CharNo + 1, (Code1.Length - CharNo - 1))

ただし、本当に必要だったのは次のことだけだったので、不要です。

Code1.Substring(CharNo + 1)

また、ピリオドがテキストの最後の文字である場合に備えて、長さより短いかどうかを確認する必要CharNo + 1があります。

If CharNo + 1 < Code1.Length Then
    MyCodebookValueStrip.o_Code1 = Code1.Substring(CharNo + 1)
Else
    MyCodebookValueStrip.o_Code1 = ""
End If

ただし、取得しようとしているのがファイル名の拡張子である場合は、Pathクラスを使用して正しく (そして簡単に) 実行する必要があります。

MyCodebookValueStrip.o_Code1 = Path.GetExtension(Code1)
于 2012-07-13T14:19:27.160 に答える
0

そうではありませんか:

Code1.Substring(CharNo + 1, (Code1.Length - CharNo - 1))

あなたCode1.Length - CharNoに余分なキャラクターを与えるからです。

元:

"abc.abcd"

最後の 4 文字が必要なlength - charNoため、結果は 5 になります。したがって、エラーが発生します。

于 2012-07-13T14:19:58.770 に答える
0
   Dim output As String
   Dim Code1 As String = "test.txt"
   Dim charNo As Integer = Code1.IndexOf('.')
   If ((charNo <> -1) And (Code1.Length <> charNo + 1)) Then
      output = Code1.Substring(charNo, Code1.Length - charNo)
   Else
      output = ""
   End If

上記は私にとって完璧に機能します..IndexOfメソッドから-1の位置を取得している可能性がありますか?

于 2012-07-13T14:15:27.400 に答える