将 IP:Port 字符串格式化为
Posted
技术标签:
【中文标题】将 IP:Port 字符串格式化为【英文标题】:Formatting IP:Port string to 【发布时间】:2014-10-15 05:01:13 【问题描述】:我正在尝试制作一个用于实验的小聊天程序,但由于我不是最好的 Java 程序员,我不知道如何将端口与 IP 分开,因为它们都在同一个字符串中。
这不是很清楚,但这基本上是我想要做的。 用户以 IP:Port 格式输入 IP 和端口 扫描仪抓取它并将其放入字符串中 不知何故,将冒号之前的所有内容放入字符串,将冒号之后的所有数字放入 int。
关于如何做到这一点的任何想法?
【问题讨论】:
如果您可以假设您的输入格式为 IP:Port,您可以使用 String 类的split()
方法在 :
上进行拆分。这将返回一个包含两个元素的数组,第一个包含 IP,第二个包含端口
我会在谷歌上搜索一下,谢谢 :)
【参考方案1】:
首先,您应该检查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
【讨论】:
【参考方案2】: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);
【讨论】:
【参考方案3】:要验证 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();
感谢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");
【讨论】:
【参考方案4】:使用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]);
【讨论】:
【参考方案5】: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]
。
【讨论】:
【参考方案6】:您可以在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 地址。 希望这会有所帮助。
【讨论】:
以上是关于将 IP:Port 字符串格式化为的主要内容,如果未能解决你的问题,请参考以下文章