1

したがって、私は以前にこの問題に対処したことがあり、問題を解決するための受け入れられたパターンがあると考えていましたが、まだ何も見つけていません。私は周りを検索してみましたが、自分自身をいじってみましたが、満足のいく答えが得られなかったので、SOに目を向けています

String str = "blah1blah2"

文字 '1' または '2' のどちらが最初に発生するかを知りたいです (これは明らかに作り話です)。1 と 2 を比較するために str.indexOf() を使用できることはわかっていますが、これには -1 が返される可能性があるという問題があります。

これに対処するための良い方法を教えてください。

参考までに: 私は Java で作業していますが、この種の indexOf 関数は他の言語ではかなり一般的だと思います。

4

4 に答える 4

1

必要な動作を正確に定義することから始めるべきだと思います。検索用語が「1」と「2」であると仮定すると、次の各文字列に対して何を返す必要がありますか?

  • 「何とか1何とか2」
  • "何とか何とか1"
  • 「ブラブラ1」
  • 「ブラブラ2」
  • 「ブラブラ」

これらのそれぞれについてテスト ケースを作成し、その答えを示します。これでテストに合格します。単純!

于 2012-09-09T23:37:14.540 に答える
1

どの程度の柔軟性が必要かはわかりませんが、次のStringようなをループする古き良き方法でこれを行うだけです。

public static char findFirstChar(String str, char c1, char c2) {
    for (char c : str.toCharArray())
        if (c == c1 || c == c2)
            return c;
    return 0;
}

もちろん、charどちらcharの s も文字列に見つからない場合は、最初に遭遇した を返すか、0 を返します。

任意の数の文字を検索する場合:

public static char findFirstChar(String str, char ... chars) {
    for (char c1 : str.toCharArray())
        for (char c2 : chars)
            if (c1 == c2)
                return c1;
    return 0;
}
于 2012-09-09T23:39:15.427 に答える
0

別の方法があるかどうかはわかりませんが、比較する前に文字が存在するかどうかを確認するには:

String result;
if (str.indexOf('1') > -1 && str.indexOf('2') > -1 ) {
   str.indexOf('2') > str.indexOf('1') ? result ="1 before 2":result="2 before 1";
}
else {
    result="one of them is not there"
}
System.out.println(result);

すべてはあなたが期待する結果に依存します

于 2012-09-09T23:37:38.630 に答える