我正在使用 String.split() 将一些字符串划分为 IP,但它returning an empty array
,所以我使用 String.substring() 解决了我的问题,但我想知道为什么没有按预期工作,我的代码是:
// 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"}
....
split 适用于正则表达式。正则表达式表示法中的"."是单个字符。要使用 split 在实际点上拆分,您必须像这样对其进行转义:split("\.")
.
使用
String[] ipCorta = lista[c].split("\.");
在正则表达式中,.
几乎与任何字符匹配。如果你想匹配点,你必须\.
转义它。
你的陈述
lista[c].split(".")
将第一个字符串"196.168.0.1"
拆分为任何(.
)字符,因为 String.split 将正则表达式作为参数。
但是,关键是,为什么你会得到一个空数组,该拆分还将删除结果中所有尾随的空字符串。
例如,请考虑以下语句:
String[] tiles = "aaa".split("a");
这会将字符串拆分为三个空值,如 [ , , ]
。由于尾随的空值将被删除,因此数组将保持空[]
。
如果您有以下语句:
String[] tiles = "aaab".split("a");
它将字符串拆分为三个空值和一个填充值b
就像[ , , , "b"]
由于没有尾随空值,因此结果仍保留这四个值。
为了摆脱你不想在每个字符上拆分的事实,你必须像这样转义正则表达式:
lista[c].split("\.")
String.split()
将正则表达式作为参数,因此您必须转义句点(与任何内容匹配)。因此,请改用split("\.")
。
可以帮助您:
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);
}
}