【问题标题】:Formatting IP:Port string to将 IP:Port 字符串格式化为
【发布时间】:2014-10-15 05:01:13
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您可以假设您的输入格式为 IP:Port,您可以使用 String 类的 split() 方法在 : 上进行拆分。这将返回一个包含两个元素的数组,第一个包含 IP,第二个包含端口
  • 我会在谷歌上搜索一下,谢谢 :)

标签: java string ip port


【解决方案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();
          }
      
      }
      

      感谢frbmkyong :)

      并分离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 地址。 希望这会有所帮助。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2010-10-16
              • 2019-06-03
              • 2010-10-07
              • 2014-10-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多