Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String.split(字符串模式)Java方法未按预期工作_Java_String_Split_String Split - Fatal编程技术网

String.split(字符串模式)Java方法未按预期工作

String.split(字符串模式)Java方法未按预期工作,java,string,split,string-split,Java,String,Split,String Split,我正在使用String.split()将一些字符串分割为IP,但其返回空数组,因此我使用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 re

我正在使用String.split()将一些字符串分割为IP,但其
返回空数组
,因此我使用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();
}
//过滤器IP(“196.168.0.1 127.0.0.1 255.23.44.1 100.168.100.1 90.168.0.1”、“168”);
公共静态字符串筛选器IP(字符串IP、字符串筛选器){
字符串resultado=“”;
字符串[]lista=ips.split(“”);
for(int c=0;c
它应该将
字符串[]返回为{“196”、“168”、“0”、“1”}

使用

String[] ipCorta = lista[c].split("\\.");
在正则表达式中,
匹配任何字符。
如果要匹配点,必须将其转义。
\\\.

拆分可用于正则表达式。'.'在正则表达式中,符号是单个字符。要使用split在实际点上拆分,必须像这样转义:
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);
    }
}
你的陈述

lista[c].split(".")
将第一个字符串
“196.168.0.1”
拆分为任何(
)字符,因为它以一个作为参数

但是,得到空数组的原因是,拆分也会删除结果中所有尾随的空字符串

例如,考虑下面的语句:

String[] tiles = "aaa".split("a");
String[] tiles = "aaab".split("a");
这将把字符串分成三个空值,如
[,]
。由于后面的空值将被删除,因此数组将保持为空
[]

如果您有以下声明:

String[] tiles = "aaa".split("a");
String[] tiles = "aaab".split("a");
它将字符串拆分为三个空值和一个填充值
b
[,“b”]
由于没有尾随的空值,因此结果将保留这四个值

为了消除这样一个事实,即您不想在每个字符上分割,您必须像这样转义正则表达式:

lista[c].split("\\.")
转义:lista[c].split(“\”)