3

Javaを使用して、別の文字列で見つかった文字の範囲を取得しようとしています:

String input = "test test2 Test3";
String substring = "test2";

int diffStart = StringUtils.indexOf(input, substring);
int diffEnd = StringUtils.lastIndexOf(input, substring);

私は手に入れたい

  • 差分開始 = 5
  • diffEnd = 10

しかし、私は得ています

  • 差分開始 = 5
  • diffEnd = 5

Apache の Commons のlastIndexOf関数に基づいて動作するはずです。

public static int lastIndexOf(CharSequence seq, CharSequence searchSeq)

null を処理して、CharSequence 内の最後のインデックスを検索します。このメソッドは、可能であれば String.lastIndexOf(String) を使用します。

StringUtils.lastIndexOf("aabaabaa", "ab") = 4

私は何を間違っていますか?

4

1 に答える 1

3

あなたはおそらく欲しい

diffStart = String.valueOf(StringUtils.indexOf(strInputString02, strOutputDiff));
diffEnd = diffStart + strOutputDiff.length();

lastIndexOf は一致する文字列を見つけますが、その最後のインスタンスです。

例 ab1 ab2 ab3 ab4

lastindexof("ab") は 4 番目の ab を見つけます

indexof("ab") は最初の ab (位置 0) を見つけます

ただし、常に最初の文字の位置を返します。

部分文字列のインスタンスが 1 つしかない場合、lastindexof と indexof は同じインデックスを返します。

(例をさらに強化するために、部分文字列がまったく存在しない場合に備えて、いくつかの -1 チェックを実行することもできます)

于 2016-10-03T14:37:53.507 に答える