while(line.contains("^")) 循环不中断
while(line.contains("^")) loop not breaking
这是我的 class:
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>
当我运行它时,它会进入无限循环。任何建议都会有所帮助。谢谢!
line = line.replaceFirst("^", Integer.toString(i));
replaceFirst
的第一个参数是正则表达式,"^"
作为正则表达式表示"the start of the string"。所以这个命令只是将值保留在字符串的开头,并且从不删除任何抑扬符。相反,你应该写:
line = line.replaceFirst("\^", Integer.toString(i));
String.replaceFirst 方法接受一个 regular expression,它具有用于某些操作的特殊字符 - 这些字符之一是 ^
字符。您需要转义它以查找它的出现(在 Java 中,因为反斜杠在字符串中是特殊的,所以在 "replaceFirst" 参数中这将是 "\^"
)
这是我的 class:
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>
当我运行它时,它会进入无限循环。任何建议都会有所帮助。谢谢!
line = line.replaceFirst("^", Integer.toString(i));
replaceFirst
的第一个参数是正则表达式,"^"
作为正则表达式表示"the start of the string"。所以这个命令只是将值保留在字符串的开头,并且从不删除任何抑扬符。相反,你应该写:
line = line.replaceFirst("\^", Integer.toString(i));
String.replaceFirst 方法接受一个 regular expression,它具有用于某些操作的特殊字符 - 这些字符之一是 ^
字符。您需要转义它以查找它的出现(在 Java 中,因为反斜杠在字符串中是特殊的,所以在 "replaceFirst" 参数中这将是 "\^"
)