Java查找和替换文本

时间:2011-05-06 14:20:25

标签: java android search text replace

您好我正在使用Android应用,这是我的问题

我有一个文本文件,可能有100行长,但不同于手机,但我们可以说某个部分是这样的

line 1 = 34
line 2 = 94
line 3 = 65
line 4 = 82
line 5 = 29
etc

每一行都将等于某个数字,但是该数字将与手机不同,因为我的应用程序将更改此数字,并且在我的应用程序安装之前可能已经不同。所以这是我的问题,我想搜索文本文件说“第3行=”然后删除整行,并将其替换为“第3行=某些数字”

我的主要目标是在第3行的末尾更改该数字并保持第3行与文本完全相同我只想编辑数字但问题是数字总是不同

我怎么能这样做?谢谢你的帮助

4 个答案:

答案 0 :(得分:2)

您不能在文件中间“插入”或“删除”字符。也就是说,您无法在文件中间用1231234替换12

因此,要么“填充”每个数字,以便它们都具有相同的宽度,即,您代表43,例如000043,或者您可能必须重新生成整个文件。

要重新生成整个文件,我建议您逐行读取原始文件,根据需要处理这些行,然后将它们写入新的临时文件。然后,当您通过时,将旧文件替换为新文件。

要处理line我建议您执行类似

的操作
String line = "line 3 = 65";

Pattern p = Pattern.compile("line (\\d+) = (\\d+)");
Matcher m = p.matcher(line);

int key, val;
if (m.matches()) {
    key = Integer.parseInt(m.group(1));
    val = Integer.parseInt(m.group(2));

    // Update value if relevant key has been found.
    if (key == 3)
        val = 123456;

    line = String.format("line %d = %d", key, val);
}

// write out line to file...

答案 1 :(得分:2)

感谢各位回复,但我最终做的是在bash和外卡命令*中使用sed命令来替换该行,然后通过java运行脚本,这有点像这样

<强>脚本

busybox sed -i's / line 3 =。* / line 3 = 70 / g'/ path / to / file

<强>爪哇

命令

的execCommand( “/路径/到/脚本”);

方法

public Boolean execCommand(String command) 
{
    try {
        Runtime rt = Runtime.getRuntime();
        Process process = rt.exec("su");
        DataOutputStream os = new DataOutputStream(process.getOutputStream()); 
        os.writeBytes(command + "\n");
        os.flush();
        os.writeBytes("exit\n");
        os.flush();
        process.waitFor();
    } catch (IOException e) {
        return false;
    } catch (InterruptedException e) {
        return false;
    }
    return true;
}

答案 2 :(得分:0)

最简单的解决方案是将整个文件读入内存,然后替换想要更改的行,然后将其写回文件。

例如:

String input = "line 1 = 34\nline 2 = 94\nline 3 = 65\nline 4 = 82\nline 5 = 29\n";
String out = input.replaceAll("line 3 = (\\d+)", "line 3 = some number");

...输出:

line 1 = 34
line 2 = 94
line 3 = some number
line 4 = 82
line 5 = 29

答案 3 :(得分:0)

几个想法。更简单的方法是(如果可能的话)将这些行存储在集合中(如ArrayList)并在集合中执行所有操作。

可以找到另一种解决方案here。如果需要替换文本文件中的内容,可以定期调用方法来执行此操作:

try {
    BufferedReader in = new BufferedReader(new FileReader("in.txt"));
    PrintWriter out = new PrintWriter(new File("out.txt"));

    String line; //a line in the file
    String params[]; //holds the line number and value

    while ((line = in.readLine()) != null) {
            params = line.split("="); //split the line
            if (params[0].equalsIgnoreCase("line 3") && Integer.parseInt(params[1]) == 65) { //find the line we want to replace
                    out.println(params[0] + " = " + "3"); //output the new line
            } else {
                    out.println(line); //if it's not the line, just output it as-is
            }
    }

    in.close();
    out.flush();
    out.close();

} catch(Exception e) { e.printStackTrace(); }