【问题标题】:How to extract IP addresses from a single long String in Java如何从 Java 中的单个长字符串中提取 IP 地址
【发布时间】:2013-05-25 10:46:23
【问题描述】:

我正在编写一个 android 应用程序来执行 traceroute 命令。

现在,当 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();
}

此字符串的输出如下所示:

我想要做的是获取此输出并仅提取 IP 地址并将它们按顺序放入数组中。 这就是我不知道从哪里开始的地方。我正在考虑某种类型的字符串操作,但不知道从哪里开始。

如果有人有任何想法或指点,我将不胜感激。

提前致谢。

【问题讨论】:

  • 查看String类的.split()方法。
  • 你熟悉正则表达式吗?如果没有,请在此处查看,这正是您所需要的:en.wikipedia.org/wiki/Regex
  • 逐行读取..使用.split(" "),第二个元素是IP地址。

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


【解决方案1】:

试试regular expressions

在您的情况下,代码如下所示:

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

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

【讨论】:

  • 这不会删除 ips 剩下的留给我吗?
  • 不,因为我添加了[^...]这意味着不是这个。基本上,它有点 hacky:表达式是 除了 IP 之外的所有内容,而 IP 将是您的数组元素。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-22
    • 2018-01-01
    • 2019-08-09
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    相关资源
    最近更新 更多