1

我正在尝试删除所有带有 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();
        }
        
    }
4

6 回答 6

1

拆分值并检查是否有任何标记包含0.0. 还要声明循环的BufferedWriter外部并在循环之外关闭它。也使用write()方法 onBufferedWriter而不是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();
于 2013-10-31T11:24:31.410 回答
1

我更喜欢 :

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

原因是如果我们使用 endsWith(); 也许我们在字符串的末尾有一个空格

于 2013-10-31T11:44:32.350 回答
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();
        }
 }
于 2013-10-31T11:26:14.347 回答
0

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

if (!String.endsWith(" 0.0") {
    // do something
}
于 2013-10-31T11:27:05.760 回答
0

其他答案将起作用,但最好是您可以访问Passenger 类的源代码。如果乘客类有 2 个字段都被写入 String 结果 in 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();
于 2013-10-31T11:37:29.010 回答
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);
}

如果它总是在行尾。

于 2013-10-31T11:37:38.853 回答