2014-02-19 6 views
3

내가 IP를 같은 일부 문자열하지만 returning an empty array를 분할 사항 String.split() 사용하고 의도 한대로 작동하지 않는, 그래서 String.substring를 사용하여 내 문제를 해결,하지만 난 이유를 의도 한대로 작동하지 궁금하네요, 내 코드는 다음과 같습니다사항 String.split (문자열 패턴) 자바 방법은

// 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

탈출 그것을 : : 중고 장비 구매 [C] .split ("

은 당신이 모든 문자에 분할 싶지 않아, 사실 제거하려면이 같은 정규 표현식을 탈출해야 \ "). – nikis

답변

3

명세서 String.split가 인수로 regular expression이 걸리기 때문에

lista[c].split(".") 

이 어떤 (.) 문자로 첫 번째 문자열 "196.168.0.1"을 분할합니다.

그러나 빈 배열을 얻는 이유는 split이 결과에서 모든 후행 빈 문자열을 제거하기 때문입니다.

예를 들어, 다음 문을 고려해

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

이것은 [ , , ] 같은 세 개의 빈 값으로 문자열을 분할합니다. 사실 때문에 후행 빈 값이 제거되고 배열은 비어있는 상태로 유지됩니다. [].

다음과 같은 문장이 경우는 더 뒤에 빈 값이 없기 때문에 이 결과는이 네 가지 값으로 남아 [ , , , "b"] 같은 세 개의 빈 값과 하나 채워 값 b으로 문자열을 분할합니다

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

을 .

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

사용

String[] ipCorta = lista[c].split("\\."); 
를 반환해야

정규 표현식에서 .은 임의의 문자 almost과 일치합니다. 도트와 일치시키고 싶다면 \\.을 탈출해야합니다.

8

스플릿은 정규식으로 작동합니다. '.' 정규식에서 표기법은 한 문자입니다. 실제 도트에서 split to 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); 
    } 
}