格式化IP:端口字符串为

我正在尝试制作一个用于实验的小聊天程序,但看到我不是最好的Java程序员,我不知道如何将端口与IP分开,它们都在同一个字符串中。

这不是很清楚,但这基本上就是我想要做的。 用户在IP中输入IP和端口:端口格式扫描器抓取它并将其放入字符串以某种方式将冒号前的所有内容放入字符串中,并将冒号后的所有数字放入int中。

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

首先,您应该检查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 
 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); } } 

要validationIP: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(); } } 

感谢frb和mkyong 🙂

并分开IP和端口:

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

使用String.split
IP = splittedIP [0],Port = splittedIP [1] in String
你需要Integer.parseInt来获取port的整数值

 String[] ipSplit = "127.0.0.1:80".split(":"); String ip = ipSplit[0]; int port = Integer.parseInt(ipSplit[1]); 
 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]

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

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

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