我使用 String.split()将一些字符串划分为IP而不是returning an empty array
,所以我使用 String.substring()<修复了我的问题/ strong>,但我想知道为什么不按预期工作,我的代码是:
// filtrarIPs("196.168.0.1 127.0.0.1 255.23.44.1 100.168.100.1 90.168.0.1","168");
public static String filtrarIPs(String ips, String filtro) {
String resultado = "";
String[] lista = ips.split(" ");
for (int c = 0; c < lista.length; c++) {
String[] ipCorta = lista[c].split("."); // Returns an empty array
if (ipCorta[1].compareTo(filtro) == 0) {
resultado += lista[c] + " ";
}
}
return resultado.trim();
}
它应该返回String[] as {"196"."168"."0"."1"}
....
答案 0 :(得分:8)
split与正则表达式一起使用。 ''正则表达式表示法是单个字符。要在实际点上使用拆分拆分,您必须将其转义为:split("\\.")
。
答案 1 :(得分:6)
答案 2 :(得分:3)
您的陈述
lista[c].split(".")
会将第一个字符串"196.168.0.1"
拆分为任意(.
)字符,因为String.split会将regular expression作为参数。
但是,关键是,为什么你得到一个空数组,分裂也将删除结果中所有尾随的空字符串。
例如,请考虑以下声明:
String[] tiles = "aaa".split("a");
这会将String拆分为三个空值,如[ , , ]
。由于这一事实,将删除尾随的空值,数组将保持为空[]
。
如果您有以下声明:
String[] tiles = "aaab".split("a");
它会将String拆分为三个空值和一个填充值b
,如[ , , , "b"]
由于没有尾随空值,结果将保留这四个值。
为了摆脱这个事实,你不想分裂每个角色,你必须像这样逃避正则表达式:
lista[c].split("\\.")
答案 3 :(得分:1)
String.split()
将正则表达式作为参数,因此您必须转义句点(与任何内容匹配)。所以请改用split("\\.")
。
答案 4 :(得分:1)
这可能会对你有所帮助:
public static void main(String[] args){
String ips = "196.168.0.1 127.0.0.1 255.23.44.1 100.168.100.1 90.168.0.1";
String[] lista = ips.split(" ");
for(String s: lista){
for(String s2: s.split("\\."))
System.out.println(s2);
}
}