【问题标题】:while(line.contains("^")) loop not breakingwhile(line.contains("^")) 循环没有中断
【发布时间】:2017-01-05 00:55:27
【问题描述】:

这是我的课:

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>

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

【问题讨论】:

    标签: writer reader


    【解决方案1】:
    line = line.replaceFirst("^", Integer.toString(i));
    

    replaceFirst的第一个参数是正则表达式,"^"作为正则表达式的意思是“字符串的开始”。所以这个命令只是把值放在字符串的开头,从不删除任何抑扬符。相反,你应该写:

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

    【讨论】:

      【解决方案2】:

      String.replaceFirst 方法采用regular expression,它具有用于某些操作的特殊字符 - 其中一个字符是^ 字符。您需要对其进行转义以查找它的出现(在 Java 中,由于反斜杠在字符串中是特殊的,因此在“replaceFirst”参数中这将是 "\\^"

      【讨论】:

        猜你喜欢
        • 2017-03-19
        • 1970-01-01
        • 2023-02-03
        • 1970-01-01
        • 2020-10-04
        • 2017-11-14
        • 2019-05-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多