如何从Java中的单个长字符串中提取IP地址

时间:2013-05-30 01:05:31

标签: java android string ip-address android-logcat

我正在编写一个用于执行traceroute命令的Android应用程序。

现在当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地址并将它们按顺序放入数组中。 这是我无处可去的地方。我正在考虑某种类型的字符串操作,但不知道从哪里开始。

如果有人有任何想法或指示我会非常感激。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我会尝试删除第一行,然后尝试按空格使用String split。通过这种方式,您知道IP位于1,5,9,... (1+4*n_iteration)中,或者您可以按“ms”拆分,然后再按空格拆分。

答案 1 :(得分:0)

使用regular expressions尝试。

在您的情况下,代码看起来像这样:

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

我没有测试它,但它应该完成这项工作。您可以立即修补一个更优雅的解决方案。