2010-11-14 29 views
0

有沒有什麼方法可以從字符串中刪除IP?從Java字符串中刪除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,我想刪除它。我一直在尋找很多功能,但似乎無法得到索引和參數。

+0

你喜歡*提取* ip嗎? (或刪除它並提取名稱) – aioobe 2010-11-14 15:39:02

+0

你想刪除'在'文件? – helpermethod 2010-11-15 23:34:45

回答

1

使用與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}\) 

編輯

這裏的你將如何更換文件中的行(僞代碼):

  1. 打開原文即打開一個臨時文件。
  2. 逐行閱讀。這會給你一個每行的字符串。
  3. 刪除字符串中的內容。將新的String寫入臨時文件。
  4. 完成後,用臨時文件替換原始文件。
+1

正則表達式應該是\\(\\ d {1,3} \。\\ d {1,3} \。\\ d {1,3}。\\ d {1,3} \\) – Vishwanath 2010-11-14 16:14:12

+0

如何在沒有數組的情況下使用它,即,我需要更改哪些內容。 – Jaques 2010-11-14 16:44:23

+0

@vish Thx,修復它。 – helpermethod 2010-11-15 23:31:30

2

您可以查找(並刪除剩餘的字符串。

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

您的第一個解決方案將失敗'Jan vd Merwe(Jan)'這樣的數據 – 2010-11-14 16:11:40

+0

這不符合'規範'。它說IP。如果OP不是IP,也許OP想把它放在括號內。 – 2010-11-14 16:16:51

+0

@ org.life.java:沒有在任何地方定義。如果OP確定沒有特殊情況,則無需擔心特殊情況。 – darioo 2010-11-14 16:18:10