Java 删除数据行中的枚举数
我正在以以下方式构造一个数据文件.txt:Java 删除数据行中的枚举数,java,regex,Java,Regex,我正在以以下方式构造一个数据文件.txt: AmountItem ItemName AmountItem ItemName ... ItemName可以包含所有字符,包括空格和特殊字符。 AmountItem是一个整数 我试图做的是得到一个包含ItemName的唯一条目的列表,其中数据文件的每个ItemName只存在一次 我试图通过使用BufferedReader读取器读取文件来实现这一点,该读取器按以下方式过滤每一行中的ItemName List<String> test = n
AmountItem ItemName
AmountItem ItemName
...
ItemName可以包含所有字符,包括空格和特殊字符。
AmountItem是一个整数
我试图做的是得到一个包含ItemName的唯一条目的列表,其中数据文件的每个ItemName只存在一次
我试图通过使用BufferedReader读取器读取文件来实现这一点,该读取器按以下方式过滤每一行中的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。替换^1,X返回12341 foo。但是,替换字符串中的单个字符是可行的
我做错了什么?或者有更有效的方法吗?我不知道是否有更有效的方法,但是为了能够使用regex进行替换,您需要使用.replaceAll。也就是说,您还必须稍微更改正则表达式,以便它不会删除太多字符:
line = line.replaceAll("^\\d+ ","");
^匹配行首,以便只删除第一个数字和空格。在这种情况下,我只使用限制为2的简单字符:
更有效的方法可能是在空间上拆分,删除结果数组中的第一个元素,然后在空间上重新连接它们。对。在本例中,String.split,2比String.replaceAll^\\d+快约20µs,
String[] parts = line.split(" ", 2);
String amount = parts[0];
String name = parts[1];