csdn有个兄弟写了一段代码实现替换TXT文件里的字符串,一行一行查找替换,不过我想替换成变量,比如一篇文章,查找到有10个单词love,然后分别把第一个"love"替换成"love 1",第二个替换成"love 2",以此类推,如何修改下面的代码实现这个功能?替换TXT文件里的字符串,一行一行查找替换,java代码:
package com.play.code;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream; //import java.io.FileNotFoundException;
//import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class ChangeFile {
public static void main(String[] argv) {
try {
BufferedReader bufReader =
new BufferedReader(
new InputStreamReader(
new FileInputStream(
new File("D:/ooooo/我的周报.txt"))));
StringBuffer strBuf = new StringBuffer();
for (String tmp = null; (tmp = bufReader.readLine()) != null; tmp = null) {
// 在这里做替换操作
tmp = tmp.replaceAll("\\*", "#");
tmp = tmp.replaceFirst("===", "\\* ");
tmp = tmp.replaceAll("===", "");
tmp = tmp.replaceAll("==", "===");
strBuf.append(tmp);
strBuf.append(System.getProperty("line.separator"));
}
bufReader.close();
PrintWriter printWriter = new PrintWriter("D:/ooooo/我的周报-新.txt");
printWriter.write(strBuf.toString().toCharArray());
printWriter.flush();
printWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.play.code;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream; //import java.io.FileNotFoundException;
//import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
public class ChangeFile {
public static void main(String[] argv) {
try {
BufferedReader bufReader =
new BufferedReader(
new InputStreamReader(
new FileInputStream(
new File("D:/ooooo/我的周报.txt"))));
StringBuffer strBuf = new StringBuffer();
for (String tmp = null; (tmp = bufReader.readLine()) != null; tmp = null) {
// 在这里做替换操作
tmp = tmp.replaceAll("\\*", "#");
tmp = tmp.replaceFirst("===", "\\* ");
tmp = tmp.replaceAll("===", "");
tmp = tmp.replaceAll("==", "===");
strBuf.append(tmp);
strBuf.append(System.getProperty("line.separator"));
}
bufReader.close();
PrintWriter printWriter = new PrintWriter("D:/ooooo/我的周报-新.txt");
printWriter.write(strBuf.toString().toCharArray());
printWriter.flush();
printWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
for循环里面写:
while (tmp.indexOf("love") >= 0) {
tmp = tmp.replace("love", "love"+(cnt++));
}
boolean firstFlg = true;
String lineStr;
int count = 0;
int lastFindIndex = -1;
while(true) {
if (firstFlg == true) {
if (lineStr.indexOf("love") == - 1) {
break;
}
count++;
lastFindIndex = lineStr.indexOf("love");
lineStr = lineStr.replaceFirst("love", "love " + count);
firstFlg = false;
} else {
if (lineStr.indexOf("love", lastFindIndex + 6) == - 1) {
break;
}
count++;
lastFindIndex = lineStr.indexOf("love", lastFindIndex + 6);
lineStr = lineStr.replaceFirst(lastFindIndex, "love", "love " + count);
}
}
具体的方法参数位置等可能不正确。反正就是这么个思路。
兄弟按照你的修改了一下之后,似乎循环有问题,cpu占用100%,一直在跑,你测试过没有?
for循环里面写:
int pos=0;
while ((pos = tmp.indexOf("love", pos)) >= 0) {
tmp = tmp.substring(0, pos) + ("love" + (cnt++)) + tmp.substring((pos += "love".length()));
}这次是测试过的,再次表示歉意 =_=
int count = 0;
int index = 0;
while ((index = data.indexOf("love", index)) != -1) {
count++;
data.insert(index + 4, count);
index++;
}
System.out.println(data);
while ((index = data.indexOf("love", index)) != -1) {
data.insert((index+=4), ++count);
}