2013-05-30 1 views
0

traceroute 명령을 수행하기위한 Android app을 작성 중입니다.Java에서 하나의 긴 String에서 IP 주소를 추출하는 방법

지금은 traceroute가 실행될 때 콘솔 출력을 매우 긴 단일 문자열로 지정합니다. 이것은 다음과 같은 코드에 의해 수행됩니다

public void runAsRoot(String[] cmds) throws Exception { 


    Process p = Runtime.getRuntime().exec("su"); 
    DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
    InputStream is = p.getInputStream(); 
    for (String tmpCmd : cmds) { 
     os.writeBytes(tmpCmd+"\n"); 
     int readed = 0; 
     byte[] buff = new byte[4096]; 

     // if cmd requires an output 
     // due to the blocking behaviour of read(...) 
     boolean cmdRequiresAnOutput = true; 
     if (cmdRequiresAnOutput) { 
      while(is.available() <= 0) { 
       try { Thread.sleep(10000); } catch(Exception ex) {} //timeout.. gotta watch this carefully. 
      } 

      while(is.available() > 0) { 

       readed = is.read(buff); 
       if (readed <= 0) break; 
       String seg = new String(buff,0,readed); 
       System.out.println("#> "+seg); 
       ListofIPs = seg; 


      } 
     } 
    }   
    os.writeBytes("exit\n"); 
    os.flush(); 
} 

이 문자열의 출력은 다음과 같습니다 logcat output after printing the string

내가 뭘 원하는이 출력을 만 IP 주소를 추출 순서에 넣어이다 배열로. 이것은 내가 어디서부터 시작될지라도 내가 잃어버린 곳입니다. 나는 어떤 종류의 문자열 조작을 생각하고 있지만 어디에서 시작해야할지 모른다.

누구나 아이디어 나 조언이 있다면 크게 감사하겠습니다.

미리 감사드립니다.

+0

'String' 클래스의'.split()'메소드를보십시오. – fge

+0

정규식에 익숙합니까? 그렇지 않다면 여기에서 확인하십시오. http://en.wikipedia.org/wiki/Regex – hellerve

+0

줄 단위로 읽기 ... .split ("")'두 번째 요소는 IP 주소입니다. – Shivam

답변

1

첫 줄을 지우고 공백으로 String split을 사용하려고합니다. 이렇게하면 IP가 1,5,9, .. (1+4*n_iteration)에 있거나, "ms"로 분할 한 다음 공백으로 다시 분할 할 수 있습니다.

+0

이 방법이 가장 효과적입니다. 분할 아이디어를 주셔서 감사합니다 – Cheesegraterr

0

regular expressions으로 시도해보십시오.

seg.split("[^((\d{1,3}\.){3}\d{1,3}]"); 

내가 그것을 테스트하지 못했지만,이 작업을 수행해야합니다 귀하의 경우

는 코드는 다음과 같을 것이다. 빠른 시간 내에보다 세련된 솔루션을 고칠 수 있습니다.

+0

이 ips를 삭제하고 나머지는 나를 떠나지 않을까요? – Cheesegraterr

+0

아니요, [^ ...]을 추가했기 때문에 아니요 *이 *는 아닙니다. 근본적으로 그것의 조금 해키 : 표정은 * IP를 제외하고 모두이다 * IP는 당신의 배열 성분 일 것이다. – hellerve

관련 문제