有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用indexOf和substring计算数字

我不知道该怎么做,我的程序应该让用户输入一个IP地址。然后,程序应该以十进制表示法返回一个值。e、 g 134.115.64.1为输入,225569969为输出

我想知道是否可以在变量中存储134115、64和1。 如果是的话,我该怎么做呢?链接到任何类型的教程都会很好,因为我自己还没有找到

谢谢


共 (5) 个答案

  1. # 1 楼答案

    解析IP地址的技巧

    BigInteger ip = new BigInteger(1,InetAddress.getByName("134.115.64.1").getAddress());
    // or
    long ip = InetAddress.getByName("134.115.64.1").hashCode() & 0xffffffffL;
    
    System.out.println(ip);
    

    印刷品

    2255699969
    
  2. # 2 楼答案

    我还不能完全理解你的问题。。。。但我会尽力去做

    String s = "134.115.64.1";
    
        String[] arr = s.split("\\.");
    
        ArrayList<Long> ar = new ArrayList<Long>();
    
        for(String j : arr){
    
        ar.add(Long.parseLong(j)); // All the Number are Stored in this ArrayList
    
         }
    
        System.out.println(ar);
    
  3. # 3 楼答案

    您可以使用正则表达式重写到计算中,然后通过JavaScript引擎传递该计算。我想使用位移位运算符,但它们只适用于32位有符号数字

    String input = "134.115.64.1";
    String sum = input.replaceAll("(\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)",
            "($1 * 16777216) + ($2 * 65536) + ($3 * 256) + $4");
    System.out.println(sum);
    ScriptEngineManager mgr = new ScriptEngineManager();
    ScriptEngine engine = mgr.getEngineByName("JavaScript");
    
    double result = (Double) engine.eval(sum);
    System.out.println((long) result);
    
  4. # 4 楼答案

    long longIP(String ip) {
        String[] octets = ip.split("\\.");
        long ipLong = 0;
        for (int i = 0; i < 4; i++) {
            ipLong = ipLong * 256 + Long.parseLong(octets[i]);
        }
        return ipLong;
    }
    
  5. # 5 楼答案

    您可以执行以下操作:

    String str = "134.115.64.1";
    
    String arr[] = str.split("\\.");
    
    int[] ips = new int[arr.length];
    for(int i=0; i<arr.length;i++)
        ips[i] = Integer.parseInt(arr[i]);