String.split(String pattern) Java 方法未按预期工作



我正在使用 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);
    }
}

最新更新