2014-02-19 27 views
3

我使用String.split()來劃分一些字符串作爲IP地址,但其returning an empty array意,所以我固定使用String.substring我的問題(),但我不知道爲什麼沒有按預期工作,我的代碼是:String.split(字符串模式)的Java方法未正常工作

// filtrarIPs("196.168.0.1 127.0.0.1 255.23.44.1 100.168.100.1 90.168.0.1","168"); 
public static String filtrarIPs(String ips, String filtro) { 
    String resultado = ""; 
    String[] lista = ips.split(" "); 
    for (int c = 0; c < lista.length; c++) { 
     String[] ipCorta = lista[c].split("."); // Returns an empty array 
     if (ipCorta[1].compareTo(filtro) == 0) { 
      resultado += lista[c] + " "; 
     } 
    } 
    return resultado.trim(); 
} 

應該返回一個String[] as {"196"."168"."0"."1"} ....

+0

逃避它:LISTA [C] .split(」 \「)。 – nikis

回答

3

你的陳述

lista[c].split(".") 

會被任何(.)字符分割第一個String "196.168.0.1",因爲String.split需要regular expression作爲參數。

但是,點,爲什麼你得到一個空數組是,該拆分還將刪除結果中的所有尾隨空字符串。

例如,請考慮下面的語句:

String[] tiles = "aaa".split("a"); 

這將字符串分割成三個空值像[ , , ]。由於這個事實,尾隨的空值將被刪除,數組將保持爲空[]

如果你有以下語句:

String[] tiles = "aaab".split("a"); 

將字符串分割成三個空值和一個充滿價值b[ , , , "b"] 由於沒有尾隨空值,結果仍然與這四個值。

爲了擺脫的事實,你不想拆就每一個字符,你必須逃脫正則表達式是這樣的:

lista[c].split("\\.") 
6

使用

String[] ipCorta = lista[c].split("\\."); 

在正則表達式中.匹配almost任何字符。 如果你想匹配點,你必須逃脫它\\.

8

拆分使用正則表達式。 ''在正則表達式中是單個字符。要使用split拆分實際點,您必須像這樣轉義它:split("\\.")

1

String.split()需要一個正則表達式作爲參數,所以你必須逃避週期(這與任何事情相匹配)。因此改爲使用split("\\.")

1

這可以幫助你:

public static void main(String[] args){ 
    String ips = "196.168.0.1 127.0.0.1 255.23.44.1 100.168.100.1 90.168.0.1"; 
    String[] lista = ips.split(" "); 
    for(String s: lista){ 
     for(String s2: s.split("\\.")) 
      System.out.println(s2); 
    } 
} 
相關問題