2

String が定義されていると仮定すると、次のようになります。

String list = "apples,orange,bears,1,100,20,apple";

リストをコレクションまたは配列に分離せずに、リスト内の文字列を見つけるより良い方法はありますか? たとえば、"bear",完全に一致するものがないため、検索しても結果はありbearsません(カウントされません)。,bear,"ファイルの先頭または末尾に bear という単語が表示されないという保証はないため、" を探すことはできません。

4

5 に答える 5

7

次のようなものを引き続き使用できます。

(^|,)bears(,|$)

コンマ、または行の先頭または末尾を探します。これは、探しているものだと思います。

編集:補遺

Denomales が言及したので、上記の正規表現検索は、見つかったコンマ (存在する場合) を消費するため、次のようなリストの場合に重複する一致が得られ、apples,orange,bears,honey,bears,bears,bears,bears,9999,bees存在する 5 つのうち 3 つだけがカウントされます。この場合にできることは、ルックアラウンドを使用することです。それらを理解するには少し時間がかかるかもしれませんが、その要点は、それらを消費することなく、キャラクターの後ろまたは前を見ることです. これにより、5 匹のクマをすべて見つけることができます。これを使用する方法は次のとおりです。

(?<=^|,)bears(?=,|$)

キャラ崩壊…

^は行頭を意味するため、カンマがなくても一致します。

,リテラルコンマです。

(?<= ... )は肯定的な後読みであり、b文字の後ろを調べて、bears内部にあるもの ( a^または a のいずれか) があることを確認し,ます。

(?= ... )は肯定的な先読みであり、s文字の世話をしbearsて、内部にあるもの ( a,または a のいずれか) があることを確認し$ます。

$は行の終わりを意味し、 と非常によく似て^いますが、最後にあります。

于 2013-07-21T16:18:56.553 に答える
2

add ',' in the begining and at the end of the string

newList = ",apples,orange,bears,1,100,20,apple,";

then you can search for ,bear,

于 2013-07-21T16:21:12.653 に答える
2

一致が発生したかどうか、または一致が発生した場所を確認するかどうかはわかりません。一致が発生したかどうかを確認する最も簡単な方法は、

list.matches("(^|(.*,))bear((,.*)|$)");

^、bear が文字列の先頭にあるかどうかを確認します。|手段や。は.*0 個以上の文字を,検索し、 は単純にコンマを検索します。は文字列の$終わりを表します。括弧は一致条件として使用されますが、検索対象 (つまりbear) の一部であるとは限りません。詳細については、Java のPatternクラスを参照してください。

どこで発生したかを知りたい場合は、これが簡単な方法です。

String list = "apples,orange,bear,1,100,20,apple";//Notice that I made "bear" singular
Pattern pattern = Pattern.compile((?<=^|,)bear(?=,|$));//Compile the regex
Matcher matcher = pattern.matcher(list);//The text you want to search in
// Check all occurrences
while (matcher.find()) {
    System.out.print("Start index: " + matcher.start());
    System.out.print(" End index: " + matcher.end());
    System.out.println(" Found: " + matcher.group());
}

印刷する

Start index: 14 End index: 18 Found: bear

これらのソリューションは両方とも正規表現を使用します。

于 2013-07-21T17:20:00.637 に答える