【问题标题】:Iterating through two String[] arrays in parallel?并行遍历两个 String[] 数组?
【发布时间】:2017-04-08 11:18:28
【问题描述】:

当每个数组中只有一个条目时,以下方法可以正常工作,否则会导致IllegalArgumentException

String[] defaultGWs = {"10.0.0.138, 10.0.0.138"};
String[] interfacesNetmasks = {"255.255.255.0, 255.255.255.0"};

for (String defaultGW: defaultGWs) {
        for (String interfacesNetmask: interfacesNetmasks) {
            SubnetInfo subnetInfo = (new SubnetUtils(defaultGW, interfacesNetmask).getInfo());

            // CIDR signature
            String cidrSignature = subnetInfo.getCidrSignature();
            System.out.println("CIDR Signature: " + cidrSignature);
        }

例外:

Exception in thread "main" java.lang.IllegalArgumentException: Could not parse [255.255.255.0, 255.255.255.0]
    at org.apache.commons.net.util.SubnetUtils.toInteger(SubnetUtils.java:287)
    at org.apache.commons.net.util.SubnetUtils.toCidrNotation(SubnetUtils.java:360)
    at org.apache.commons.net.util.SubnetUtils.<init>(SubnetUtils.java:62)
    at GetSubnetInfoJava.main(GetSubnetInfoJava.java:13)

如何并行遍历大量网关和网络掩码,以便在每次迭代时生成一个新的子网信息对象?

【问题讨论】:

  • 将 { "10.0.0.138, 10.0.0.138" } 更改为 { "10.0.0.138","10.0.0.138" } 与 interfacesNetmasks 相同。
  • 或者最好使用Map&lt;String,String&gt; 来保持您的 IP 和网络掩码附加到它们,尤其是在 IP 不同等情况下。

标签: java string iterator


【解决方案1】:

您当前的代码实际上会遍历每个 defaultGW 的 all interfaceNetmasks,因此如果您想并行遍历数组:

  • 根据字符串的数量创建一个 for循环。
  • 循环遍历它,使用索引(for 循环编号)从每个数组中提取一个字符串。
  • 保持其余代码相同 - 除了修复数组项中的引号。

    String[] defaultGWs = {"10.0.0.138", "10.0.0.138"};
    String[] interfacesNetmasks = {"255.255.255.0", "255.255.255.0"};
    
    for (int i = 0; i < defaultGWs.length; i++) {
    
        SubnetInfo subnetInfo = (new SubnetUtils(defaultGWs[i],    interfacesNetmasks[i]).getInfo());
    
        // CIDR signature
        String cidrSignature = subnetInfo.getCidrSignature();
        System.out.println("CIDR Signature: " + cidrSignature);
    
    }
    

【讨论】:

  • 谢谢。除了我犯的语法错误之外,这正是我想要的。
【解决方案2】:

变化:

String[] defaultGWs = {"10.0.0.138, 10.0.0.138"};
String[] interfacesNetmasks = {"255.255.255.0, 255.255.255.0"};

收件人:

 String[] defaultGWs = {"10.0.0.138", "10.0.0.138"};
 String[] interfacesNetmasks = {"255.255.255.0", "255.255.255.0"};

【讨论】:

    【解决方案3】:
    String[] defaultGWs = {"10.0.0.138, 10.0.0.138"};
    String[] interfacesNetmasks = {"255.255.255.0, 255.255.255.0"};
    

    这些都是问题所在。您声明一个字符串数组,每个字符串只有 1 个条目。把它改成

    String[] defaultGWs = {"10.0.0.138", "10.0.0.138"};
    String[] interfacesNetmasks = {"255.255.255.0","255.255.255.0"};
    

    现在您有 2 个包含 2 个条目的数组,您可以正确地遍历它们

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-27
      • 2010-12-12
      相关资源
      最近更新 更多