2

「私」のようなものを削除しようとしています。「II」ストーリー「ロビンフード」のテキストファイルからの「279」(ページ番号と章)など。これまでのところ、数字を取り除く方法がわかりません(arraylist文字列です)

for (int x = 0; x < list.size(); x++) {

    if (list.get(x).equalsIgnoreCase("I.") || list.get(x).equalsIgnoreCase("II.") || list.get(x).equalsIgnoreCase("III.") || list.get(x).equals("IV.") || list.get(x).equals("V.") || list.get(x).equalsIgnoreCase("VI.") || list.get(x).equalsIgnoreCase("VII.") || list.get(x).equalsIgnoreCase("VIII.") || list.get(x).equals("IX.") || list.get(x).equals("X.") || list.get(x).equals("XI.") || list.get(x).equalsIgnoreCase("XII.") || list.get(x).equalsIgnoreCase("XIII.") || list.get(x).equalsIgnoreCase("XIV.") || list.get(x).equalsIgnoreCase("XV.") || list.get(x).equalsIgnoreCase("XVI.") || list.get(x).equalsIgnoreCase("XVII.") || list.get(x).equalsIgnoreCase("XVIII.") || list.get(x).equalsIgnoreCase("XIX.") || list.get(x).equalsIgnoreCase("XX.") || list.get(x).equalsIgnoreCase("XXI.")) {
        list.remove(x);
        numWords--;
    }

    for (int y = 0; y < 9; y++) {
        if (list.get(x) == y) {
            list.remove(x);
            numWords--;
        }


    }

}

確認しようとしているエラーがあることは承知していますがy == list.get(x)、番号を削除する別の方法を実際に考えることはできません。

4

2 に答える 2

5

その大規模なステートメントを持つ代わりに、ifおそらく次のようなことをすることができます

if (list.get(x).toUpperCase().matches("[IVXLCDM]+\\.")) {...}

[IVXLCDM]IV..のいずれかに一致します。Mしたがって[IVXLCDM]+、これらの文字の任意の連続文字列に一致します。は\.、文字列がピリオドで終了することを保証します。

ここで、数値を一致させたい場合は、正規表現を使用して、"\\d+"上記と同じアイデアを適用できます。

于 2012-12-03T23:17:58.023 に答える
3

数字またはローマ数字に一致する行を見つけるには、正規表現を使用する必要があります。必要な正規表現(正規表現の略)は、おそらく次のようなものです。

^([0-9]+)|([IVXLCM]+)\\.?$

アラビア数字とローマ数字の両方をチェックします。これは正規表現のチュートリアルで、正規表現を試すためのサンプルアプリケーションを提供し、構文を説明しています。

于 2012-12-03T23:21:45.620 に答える