java从文本文件中删除具有特定元素的行

时间:2013-10-31 11:17:50

标签: java file-io

我正在尝试删除0.0作为打印文本文件的所有行。

这是它输出的内容,

  

4177516040935072 14.94

     

4270931484327447 7.54

     

4308546496189733 7.1

     

4421407386000242 0.0

     

4436391685645089 0.0

这就是我想要输出的内容

  

4177516040935072 14.94

     

4270931484327447 7.54

     

4308546496189733 7.1

这是我的代码:

Collection<Passenger> c = passengers.values();
        Iterator<Passenger> itr = c.iterator();


        try {

            while (itr.hasNext()) { 

                //System.out.println(itr.next().getBillAmount());
                BufferedWriter writer = new BufferedWriter(new FileWriter(fileOutput,true));
            writer.append(itr.next().toString());
             writer.newLine();
             writer.close();
            }




        } catch (IOException e3) {
            e3.printStackTrace();
        }

    }

6 个答案:

答案 0 :(得分:1)

拆分值并检查是否有任何令牌包含0.0。同时在循环外声明BufferedWriter并在循环外部关闭它。另请使用write()上的BufferedWriter方法代替append()

        BufferedWriter writer = new BufferedWriter(new FileWriter(fileOutput,true));
        while (itr.hasNext()) { 

            List<String> values = Arrays.asList(itr.next().toString().split(" "));

            if(!values.contains("0.0")){
                writer.write(itr.next().toString());
                writer.newLine();
            }
         }
         writer.close();

答案 1 :(得分:1)

我更喜欢:

    if (!String.Contains(" 0.0") {
          System.Out.println(...);
    }

因为我们使用endsWith();也许我们在字符串末尾有一个空格

答案 2 :(得分:0)

你可以试试这个:

 while (itr.hasNext()) { 
        if (!itr.next().toString().contains(" 0.0"))
        {
          //System.out.println(itr.next().getBillAmount());
          BufferedWriter writer = new BufferedWriter(new FileWriter(fileOutput,true));
          writer.append(itr.next().toString());
          writer.newLine();
          writer.close();
        }
 }

答案 3 :(得分:0)

您可以使用String.endsWith()方法

if (!String.endsWith(" 0.0") {
    // do something
}

答案 4 :(得分:0)

其他答案可行,但最好能访问Passenger类的源代码。如果乘客类有两个字段都写入toString中的字符串结果,那么最好访问要通过其getter检查其值的字段。

我还重新安排了你的代码,这样你就不会关闭并重新打开每行的BufferedWriter

示例:

BufferedWriter writer = new BufferedWriter(new FileWriter(fileOutput,true));

while (itr.hasNext()) { 
    Passenger p = itr.next();
    if (p.getSomeField() != 0.0) {
      writer.append(p.toString());
      writer.newLine();
    }
}

writer.close();

答案 5 :(得分:0)

int i = 0;
for(String line : lines)
{
    for(String word : line.split(" "))
    {
        if(word).equals("0.0")
        {
            lines.remove(i);
        }
    }
    i++;
}

您可以使用

if(line.contains("0.0"))
{
    lines.remove(i);
}

如果它可以在该行的任何地方。或

if(line.endsWith("0.0"))
{
    lines.remove(i);
}

如果它总是在行的末尾。