while(line.contains(“^”))循环不断

时间:2016-08-29 04:54:08

标签: writer reader

这是我的班级:

import java.io.*;

public class Test
{
  public static void main(String[] args) throws FileNotFoundException, IOException
  {
    BufferedReader br = new BufferedReader(new FileReader("file2.txt"));
    BufferedWriter bw = new BufferedWriter(new FileWriter("file.txt"));

    int i = 0;
    String line;

    while ((line = br.readLine()) != null) {
      while(line.contains("^")) {
        i ++;
        line = line.replaceFirst("^", Integer.toString(i));
      }
      bw.write(line + "\n");
    }
    br.close();
    bw.close();
  }
}

file2.txt和file.txt完全相同,我想制作看起来像

的行
<wpt lat="26.381418638" lon="-80.101236298"><ele>0</ele><time> </time><name>Waypoint #^</name><desc> </desc></wpt>

看起来像

<wpt lat="26.381418638" lon="-80.101236298"><ele>0</ele><time> </time><name>Waypoint #5</name><desc> </desc></wpt>

当我运行它时,它会进行无限循环。任何建议都会有帮助。谢谢!

2 个答案:

答案 0 :(得分:2)

line = line.replaceFirst("^", Integer.toString(i));

replaceFirst的第一个参数是正则表达式,而"^"作为正则表达式意味着&#34;字符串的开头&#34;。因此,此命令只是将值保留在字符串的开头之前,并且永远不会删除任何回旋。相反,你应该写:

line = line.replaceFirst("\\^", Integer.toString(i));

答案 1 :(得分:1)

String.replaceFirst方法采用regular expression,其中某些操作具有特殊字符 - 其中一个字符是^字符。你需要转义它以寻找它的出现(在Java中,因为反斜杠在字符串中是特殊的,在&#34; replaceFirst&#34;参数中这将是"\\^"