使用indexOf和substring来计算数字

时间:2012-08-30 06:20:49

标签: java

我不知道该怎么做,我的程序应该让用户输入一个IP地址。然后该程序应返回十进制表示法的值。例如输入134.115.64.1并输出2255699969。

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

由于

5 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

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]);

答案 1 :(得分:2)

解析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 :(得分:1)

我无法正确理解你的问题......但会尝试这样做......

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 :(得分:0)

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;
}

答案 4 :(得分:0)

您可以使用正则表达式重写计算,然后通过JavaScript引擎传递该计算。我想使用bitshift运算符,但它们仅适用于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);