2010-11-14 6 views
0

Est-il possible de supprimer des adresses IP d'une chaîne?Supprimer les adresses IP d'une chaîne en Java

Le fichier d'entrée que nous obtenons a parfois des adresses IP attachées au nom d'utilisateur, par ex.

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

Donc s'il y a une adresse IP, je veux l'enlever. J'ai regardé beaucoup de fonctions mais ne peux pas sembler obtenir l'indexation et les paramètres corrects.

+0

Aimez-vous * extraire * l'ip? (Ou enlevez-le et extrayez le nom) – aioobe

+0

Voulez-vous l'enlever 'dans 'le fichier? – helpermethod

Répondre

1

Utilisation 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("\(.*\)", ""); 

Bien sûr, l'expression rationnelle pourrait être spécialisée uniquement ips match, quelque chose comme

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

EDIT

Voici comment vous remplacer le lignes dans les fichiers (pseudocode):

  1. Ouvrir le fichier d'origine e. Ouvrez un fichier temporaire.
  2. Lecture ligne par ligne. Cela vous donnera une chaîne pour chaque ligne.
  3. Supprime le contenu dans la chaîne. Ecrivez la nouvelle chaîne dans le fichier temporaire.
  4. Une fois terminé, remplacez le fichier original par le fichier temporaire.
+1

l'expression régulière doit être \\ (\\ d {1,3} \. \\ d {1,3} \. \\ d {1,3}. \\ d {1,3} \\) – Vishwanath

+0

comment l'utiliser sans le tableau, c'est-à-dire ce que je devrais changer. – Jaques

+0

@vish Thx, l'a corrigé. – helpermethod

2

Vous pouvez rechercher le ( et supprimer la chaîne restante.

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

impressions:

Jan vd Merwe 
Piet Breedt 
Jan vd Merwe 
Sarel Fourie 

Une autre solution, basée sur les expressions régulières:

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

Imprime

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

votre première solution échouera pour 'Jan vd Merwe (Jan)' de telles données –

+0

Ce n'est pas dans le 'spec'. Il dit IPs. Peut-être que l'OP veut garder les choses entre parenthèses si ce n'est pas une adresse IP. –

+0

@ org.life.java: Cela n'a été défini nulle part. Pas besoin de s'inquiéter des cas spéciaux si OP est sûr qu'il n'y en a pas. – darioo

Questions connexes