试图从<string> arraylist </string>中删除罗马数字和数字

时间:2012-12-03 23:06:55

标签: java arrays list numbers

我试图删除像#34; I。&#34; &#34; II&#34。 &#34; 279&#34; (页码和章节)等来自故事的文本文件&#34; robin hood&#34;。到目前为止,我无法弄清楚如何摆脱数字(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)时出现了错误,但我无法想到另一种删除号码的方式。

2 个答案:

答案 0 :(得分:3)

您可以执行类似

之类的操作,而不是使用那么大的if语句
if (list.get(x).toUpperCase().matches("[IVXLCDM]+\\.")) {...}

[IVXLCDM]匹配IV .. M - 所以[IVXLCDM]+匹配这些字符的任何连续字符串。 \.确保字符串以句点结束。

现在,如果你想匹配数字,你可以使用正则表达式"\\d+",并应用与上面相同的想法。

答案 1 :(得分:3)

您需要使用正则表达式来查找与数字或罗马数字匹配的行。 正则表达式的正则表达式(正则表达式的缩写)可能类似于:

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

检查阿拉伯数字和罗马数字。 这是关于正则表达式的tutorial,它为您提供了一个示例应用程序来试用正则表达式,并解释了语法。