Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除数据行中的枚举数_Java_Regex - Fatal编程技术网

Java 删除数据行中的枚举数

Java 删除数据行中的枚举数,java,regex,Java,Regex,我正在以以下方式构造一个数据文件.txt: AmountItem ItemName AmountItem ItemName ... ItemName可以包含所有字符,包括空格和特殊字符。 AmountItem是一个整数 我试图做的是得到一个包含ItemName的唯一条目的列表,其中数据文件的每个ItemName只存在一次 我试图通过使用BufferedReader读取器读取文件来实现这一点,该读取器按以下方式过滤每一行中的ItemName List<String> test = n

我正在以以下方式构造一个数据文件.txt:

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];