Удалить IP-адреса из строки в Java - PullRequest
0 голосов
/ 14 ноября 2010

Есть ли способ удалить IP-адреса из строки?

Входной файл, который мы получаем, иногда имеет IP-адреса, прикрепленные к имени пользователя, например,

Jan vd Merwe
Piet Breedt (172.166.23.41)
Jan vd Merwe (164.23.23.51)
Sarel Fourie (23.12.167.244)
Piet Breedt

Так что, если есть IP, я хочу удалить его. Я просматривал множество функций, но, похоже, не могу правильно настроить индексирование и параметры.

Ответы [ 2 ]

2 голосов
/ 14 ноября 2010

Вы можете найти ( и удалить оставшуюся строку.

public class Main {

    public static void main(String[] args) {

        String[] names = { "Jan vd Merwe", 
                           "Piet Breedt (172.166.23.41)",
                           "Jan vd Merwe (164.23.23.51)", 
                           "Sarel Fourie (23.12.167.244)" };

        for (String name : names) {

            int parIndex = name.indexLastOf('(');
            if (parIndex != -1)
                name = name.substring(0, parIndex-1);

            System.out.println(name);
        }
    }
}

печатает:

Jan vd Merwe
Piet Breedt
Jan vd Merwe
Sarel Fourie

Другое решение на основе регулярных выражений:

    String[] names = { "Jan vd Merwe", 
                       "Piet Breedt (172.166.23.41)",
                       "Jan vd Merwe (164.23.23.51)", 
                       "Sarel Fourie (23.12.167.244)" };

    String ipExp = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";
    Pattern pattern = Pattern.compile("(.*?)\\s*(\\(" + ipExp + "\\))?");

    for (String nameIp : names) {
        Matcher m = pattern.matcher(nameIp);
        if (m.matches()) {
            String name = m.group(1);
            String ip = m.group(2) == null ? "n/a" : m.group(2);
            System.out.printf("Name: %s, Ip: %s%n", name, ip);
        }
    }

Печать

Name: Jan vd Merwe, Ip: n/a
Name: Piet Breedt, Ip: (172.166.23.41)
Name: Jan vd Merwe, Ip: (164.23.23.51)
Name: Sarel Fourie, Ip: (23.12.167.244)
1 голос
/ 14 ноября 2010

Использовать String.replace ():

String myString = "Piet Breedt (172.166.23.41)";
// replace everything in between the parens (including the parens) by the empty String
myString = myString.replace("\(.*\)", "");

Конечно, регулярное выражение может быть специализированным для сопоставления только ips, что-то вроде

\(\\d{1,3}\.\\d{1,3}\.\\d{1,3}.\\d{1,3}\)

EDIT

Вот как бы вы заменили строки в файлах (псевдокод):

  1. Откройте исходный файл.Откройте временный файл.
  2. Читайте построчно.Это даст вам строку для каждой строки.
  3. Удалите содержимое строки.Запишите новую строку во временный файл.
  4. Когда закончите, замените исходный файл временным файлом.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...