删除一行数据中的枚举数

时间:2014-02-15 08:43:08

标签: java regex

我有一个以下列方式构建的数据文件(.txt):

AmountItem ItemName
AmountItem ItemName
...

ItemName可能包含所有字符,包括空格和特殊字符。 AmountItem是一个整数。

我要做的是获取一个List<String>,其中包含ItemName个唯一条目,其中每个ItemName数据文件只存在一次。

我尝试通过以下列方式使用BufferedReader reader读取ItemName的每一行来读取文件来实现此目的

List<String> test = new ArrayList<String>();
reader = new BufferedReader(...);

while((line = reader.readLine()) != null){
    boolean noElement = true;

    line = line.replace("\\d+ ",""); \\remove the amount

    for(String str : test)
        if(str.equals(line))
            noElement = false;

     if(noElement)
        test.add(line); 
}

一切正常,但不删除每件物品的数量。

我尝试从像"12341 foo".replace("\\d","X")这样的测试字符串中删除一些东西,它返回12341 foo作为替换字符串。其他正则表达式通配符和控制字符也是如此,例如"12341 foo".replace("^1","X")返回"12341 foo"。但是,替换字符串中的单个字符可以正常工作。

我做错了什么?或者有更有效的方法吗?

2 个答案:

答案 0 :(得分:0)

我不知道是否有更有效的方法来执行此操作,但是为了能够使用正则表达式进行替换,您需要使用.replaceAll。也就是说,您还必须稍微更改正则表达式,以便它不会删除太多字符:

line = line.replaceAll("^\\d+ ","");

^匹配行的开头,以便只删除第一个数字(和空格)。

答案 1 :(得分:0)

在这种情况下,我只会使用limit 2 String[] parts = line.split(" ", 2); String amount = parts[0]; String name = parts[1]; 的简单String.split(String, int)

{{1}}