我试图制作一个小小的聊天程序进行实验,但看到我不是最好的Java程序员,我不知道如何将端口与IP分开两者都在同一个字符串中。
这不是很清楚,但这基本上就是我想做的事情。 用户以IP:端口格式输入IP和端口 扫描仪抓住它并将其放入一个字符串中 不知何故,将冒号前的所有内容放入一个字符串中,并将冒号后的所有数字放入一个int。
关于如何做到这一点的任何想法?
答案 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();
}
}
并分开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地址。 希望这会有所帮助。