我有一个以下列方式构建的数据文件(.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"
。但是,替换字符串中的单个字符可以正常工作。
我做错了什么?或者有更有效的方法吗?
答案 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}}