格式化IP:端口字符串为

时间:2014-08-21 14:03:26

标签: java string ip port

我试图制作一个小小的聊天程序进行实验,但看到我不是最好的Java程序员,我不知道如何将端口与IP分开两者都在同一个字符串中。

这不是很清楚,但这基本上就是我想做的事情。 用户以IP:端口格式输入IP和端口 扫描仪抓住它并将其放入一个字符串中 不知何故,将冒号前的所有内容放入一个字符串中,并将冒号后的所有数字放入一个int。

关于如何做到这一点的任何想法?

6 个答案:

答案 0 :(得分:2)

首先,您应该检查String是否包含冒号。然后,您可以将String.split(String)Integer.parseInt(String)

类似
String input = "127.0.0.1:8080"; // <-- an example input
int port = 80; // <-- a default port.
String host = null;
if (input.indexOf(':') > -1) { // <-- does it contain ":"?
  String[] arr = input.split(":");
  host = arr[0];
  try {
    port = Integer.parseInt(arr[1]);
  } catch (NumberFormatException e) {
    e.printStackTrace();
  }
} else {
  host = input;
}
System.out.printf("host = %s, port = %d%n", host, port);

输出

host = 127.0.0.1, port = 8080

答案 1 :(得分:1)

public static void main(String args[]){
        String allTogether= "ip:port";
        String[] array;

        if(allTogether.contains(":")){
            array = allTogether.split(":");
            String ip = array[0];
            String port = array[1];

            System.out.println(ip);
            System.out.println(port);
        }
    }

答案 2 :(得分:1)

验证IP:PORT格式你可以试试这个:

public class Validator {

    private static final String IP_PORT_PATTERN =
            "^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                    "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
                    "([01]?\\d\\d?|2[0-4]\\d|25[0-5]):" +
                    "([1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]|6553[0-5])$";

    private static final Pattern PATTERN;

    static {
        PATTERN = Pattern.compile(IP_PORT_PATTERN);
    }

    public static boolean validate(final String s) {
        return PATTERN.matcher(s).matches();
    }

}

感谢frbmkyong:)

并分开ip和port:

public static void main(String args[]) {
    String s = "127.0.0.1:8080";
    if (validate(s)) {
        String ip = s.substring(0, s.indexOf(':'));
        int port = Integer.parseInt(s.substring(s.indexOf(':') + 1));
        System.out.println(ip);
        System.out.println(port);
    } else {
        System.out.println("invalid format");
    }
}

答案 3 :(得分:0)

使用String.split
IP = splittedIP [0],Port = splittedIP [1] in String
您需要Integer.parseInt才能获得端口的整数值

String[] ipSplit = "127.0.0.1:80".split(":");
String ip = ipSplit[0];
int port = Integer.parseInt(ipSplit[1]);

答案 4 :(得分:0)

String s = "127.0.0.1:999";
String[] parts = s.split(":");
String address = parts[0];
int port = Integer.parseInt(parts[1]);

在这种情况下,address将为"127.0.0.1"port将为int 999

请注意,如果Integer.parseInt之后的字符串部分无法解析为整数,NumberFormatException将抛出:,如"127.0.0.1:blahblah"中所示。同样,如果字符串不包含:,则不会有parts[1]

答案 5 :(得分:0)

您可以在java中使用模式匹配器来获取地址和端口信息,以及验证输入字符串的方式。

Pattern pattern = Pattern.compile(REGEX_FOR_IPADDRESS_WITH_PORT);
Matcher matcher = pattern.matcher("127.0.0.1:80");
if (matcher.matches()) {
    System.out.printf("host = %s, port = %s%n", matcher.group(1), matcher.group(2));
} else {
    System.out.println("Invalid Ip Address");
}

您可以使用多个正则表达式来验证V4和V6地址。 希望这会有所帮助。