Java найти и заменить текст - PullRequest
0 голосов
/ 06 мая 2011

Привет, я работаю над приложением для Android, и это моя проблема

У меня есть текстовый файл, который может быть длиной в 100 строк, он отличается от телефона к телефону, но допустим, что раздел такой:

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

каждая строка будет равна некоторому номеру, однако этот номер будет отличаться от номера телефона, поскольку мое приложение будет изменять этот номер, и оно может уже отличаться до того, как будет установлено мое приложение. Итак, вот моя проблема: я хочу найти в текстовом файле, скажем, «line 3 =», затем удалить всю эту строку и заменить ее на «line 3 = some number»

Моя главная цель состоит в том, чтобы изменить это число в конце строки 3 и оставить строку 3, то есть текст точно таким же, я только хочу изменить число, однако проблема в том, что число всегда будет другим

Как мне это сделать? спасибо за любую помощь

Ответы [ 4 ]

2 голосов
/ 07 мая 2011

Спасибо, ребята, за ответы, но в итоге я использовал команду sed в bash и команду подстановки *, чтобы заменить строку, а затем просто запустил скрипт через java, который немного походил на это

Сценарий

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

Java

Команда

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 голосов
/ 06 мая 2011

Вы не можете «вставлять» или «удалять» символы в середине файла.То есть, вы не можете заменить 123 на 1234 или 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...
0 голосов
/ 06 мая 2011

Пара мыслей. Более простой способ сделать это (если это возможно) - сохранить эти строки в коллекции (например, ArrayList) и выполнить все ваши манипуляции в вашей коллекции.

Другое решение можно найти здесь . Если вам необходимо заменить содержимое текстового файла, вы можете периодически вызывать метод для этого:

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(); }

0 голосов
/ 06 мая 2011

Самое простое решение - прочитать весь файл в память, а затем заменить строку, которую нужно изменить, и затем записать ее обратно в файл.

Например:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...