这是我的班级:
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>
当我运行它时,它会进行无限循环。任何建议都会有帮助。谢谢!
答案 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;参数中这将是"\\^"