2014-02-19 4 views
3

Я использую String.split() разделить некоторые строки в качестве IP-адреса, но его returning an empty array, поэтому я установил мою проблему с помощью String.substring(), но я задаюсь вопросом, почему не работает должным образом, мой код:String.split (String шаблон) метод 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 [с] .split (» \ "). – nikis

ответ

3

Ваше заявление

lista[c].split(".") 

разделится первую строку "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); 
    } 
}