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

时间:2014-02-19 08:45:15

标签: java string split string-split

我使用 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"} ....

5 个答案:

答案 0 :(得分:8)

split与正则表达式一起使用。 ''正则表达式表示法是单个字符。要在实际点上使用拆分拆分,您必须将其转义为:split("\\.")

答案 1 :(得分:6)

使用

String[] ipCorta = lista[c].split("\\.");

在正则表达式中.匹配almost任何字符。 如果您想匹配点,则必须将其转义\\.

答案 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);
    }
}