【问题标题】:Java delete string from file if zero returned如果返回零,Java 从文件中删除字符串
【发布时间】:2014-11-03 20:00:42
【问题描述】:

我有一个脚本可以访问文本文件中的链接。如果返回的值为空,我正在尝试删除字符串

Example:

 1. some link (returned value 'hi')
 2. some link (returned null value)     //DELETE STRING FROM FILE BECAUSE NULL VALUE RETURNED
 3. some link (returned value 'hello')

一些代码:

while ((input = in.readLine()) != null) {
                    System.out.println(input);

            if ((input = in.readLine())=="0"){

            System.out.println("1 String deleted from file because null value returned ");                  
    }

我知道我正在检查字符串“0”而不是整数 0,因为服务器将它存储为我想的字符串。

【问题讨论】:

  • 其次,您要么想将要保留的行重新写入临时文件,然后将其复制回原始文件,要么先将所有行读入某个数组,处理它们,删除内存中的任何行,然后一次将完整的修改后的数组写回。不幸的是,您不能直接从文本文件中删除任意行。
  • 最后,请注意每次循环迭代读取两行代码。
  • 文件在几分钟内变得非常大(因此问题),因为另一个脚本不断添加指向它的链接。我遇到过临时文件解决方案,但这仍然会损害内存对吗?
  • @Sajidkhan 如果你有另一个文件不断地写入它,你不认为如果你使用这个代码来不断地写入你会遇到麻烦给它?

标签: java string io


【解决方案1】:

我认为,与其尝试在读取中删除文件(而且我什至不知道您会如何做到这一点,而且如果可以的话,这将是一个可怕的想法),您可能会更容易只需读取整个文件并将每个值存储在ArrayList<string> 的索引中即可:

ArrayList<string> lines = new ArrayList<string>();
while ((input = in.readLine()) != null) {
    lines.add(input);
}

然后在读完文件后再次写入文件,跳过任何等于"0"lines 索引:

for (String line : lines)
 {
     // skip "0"
     if (line.equals("0")) { 
         continue;
      }

      // write to file if not      
      writer.write(line);
      writer.newLine();
 } 

请注意,== 比较 Java 中的引用相等性,.equals 比较值相等性,因此对于几乎所有情况,您都想使用 .equals

当然,如果如您上面的评论所述,您有另一个文件不断写入该文件,那么您最好寻找一个全新的想法。就此而言,如果您有一个编写这些脚本的脚本,为什么不更改脚本,使其一开始就不会为空值编写行呢?除非您根本无法更改脚本,否则旋转另一个脚本以不断重写其工作的一部分(在同一个不断访问的文件上!)将是一个。无效和 b.非常有问题。

【讨论】:

  • 链接是生成的而不是被抓取的,所以我必须检查它们以检索值。读取文件不是问题,虽然您的解决方案很有帮助,但我真的在寻找在检索到字符串后删除字符串的方法,因为内存使用情况。
  • @Sajidkhan 抱歉,“在检索到字符串后删除字符串”到底是什么意思?
  • 一个脚本生成链接,这些链接存储在一个文本文件中,然后由另一个脚本检查。我想从文件中删除其值返回为零的字符串。
  • @Sajidkhan 这是一个非常强烈的指标,表明您正在以错误的方式处理此问题。正如我所说,您应该首先找到一种方法来阻止脚本写入空值,或者按照 Jason 的建议使用其他一些存储解决方案。 (即使你使用 SQL 或 SQLite,你也应该找到防止空写的方法。)
  • 我现在正在调查它,但我无法阻止脚本事先写入空值。你怎么知道一个值是否为空而不检查它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 2011-04-09
  • 2021-06-15
  • 2017-05-05
  • 1970-01-01
  • 2017-11-16
相关资源
最近更新 更多