我有一个文本文件,并通过这样的文件循环:
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
我该怎么做?
答案 0 :(得分:7)
这个正则表达式会为你提供一个带有可选端口的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
答案 1 :(得分: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,而第二个保存端口。