【问题标题】:How to extract IP:PORT from strings java如何从字符串java中提取IP:PORT
【发布时间】:2011-11-20 20:00:19
【问题描述】:

我有一个文本文件,并像这样循环文件:

for ( int i = 0; i < this.textLines.size(); i++ ) {
    String tempString = textLines.get( i );

所以现在我有 tempString 包含类似的内容:

46.102.241.199:3128 0.2990 Transp. NN N 100% 2011-11-19 17:56:02

我想要的是返回 IP:PORT 部分,在这种情况下:46.102.241.199:3128

我该怎么做?

【问题讨论】:

  • 您说“类似”,所有行的格式是否相同,或者有些行不包含任何 IP:PORT?在 IP:PORT 之前会有一些不同的数据吗?
  • 您的标签建议您使用正则表达式,但是为什么要使用更复杂的解决方案,而更简单的解决方案可以呢?你不能只做 tempString.substring(0, tempString.indexOf(' ')); 吗?当然,您不是以这种方式检查字符串的正确格式,但是您需要吗?我会以最简单的方式完成工作。
  • 你可以试试这个:stackoverflow.com/a/25866412/3767784

标签: java regex text-extraction


【解决方案1】:

这个正则表达式会给你一个带有可选端口的 IP。如果总是有端口,请删除行尾的问号。

\d{1,3}(?:\.\d{1,3}){3}(?::\d{1,5})?

请注意,这是对 IPv4 的简化验证,只会匹配它们是一种正确格式而不是有效格式。并且记得添加一个额外的反斜杠来转义java中的每个反斜杠。

这是一个java中的例子:

String text = "46.102.241.199:3128 0.2990 Transp. NN N 100% 2011-11-19 17:56:02";
String pattern = "\\d{1,3}(?:\\.\\d{1,3}){3}(?::\\d{1,5})?";

Pattern compiledPattern = Pattern.compile(pattern);
Matcher matcher = compiledPattern.matcher(text);
while (matcher.find()) {
    System.out.println(matcher.group());
}

输出:

46.102.241.199:3128

【讨论】:

    【解决方案2】:

    我认为您不需要正则表达式,这可以通过 StringTokenizer 实现。

    import java.util.ArrayList;
    import java.util.StringTokenizer;
    
    public class SOScrap{
    public static void main(String[] args) {
        ArrayList<String> as = new ArrayList<String>();
        ArrayList<String> asa = new ArrayList<String>();
        String s = "46.102.241.199:3128 0.2990 Transp. NN N 100% 2011-11-19 17:56:02";
        StringTokenizer st = new StringTokenizer(s, " ");
            while(st.hasMoreTokens()){
                  as.add(st.nextToken());
            }
    
        StringTokenizer astk = new StringTokenizer(as.get(0), ":");
    
            while(astk.hasMoreTokens()){
               asa.add(astk.nextToken());
            }
        System.out.println(asa);
    }
    
    }
    

    输出

    [46.102.241.199, 3128]
    

    您现在可以访问 ArrayList 中的元素。第一个索引保存 IP,第二个保存端口。

    【讨论】:

      猜你喜欢
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-23
      • 2021-09-24
      • 1970-01-01
      相关资源
      最近更新 更多