无法通过java split()方法从字符串中提取数字

无法通过java split()方法从字符串中提取数字,java,array-algorithms,Java,Array Algorithms,我有一个IP地址(字符串)格式为255.255.255.255的代码 并且需要对这些数字(此处未发布)执行一些后处理,但必须将字符串转换为整数数组 我在这里使用了split()方法,但没有给出结果。 我在sp上看到了其他关于regex的答案,但没有一个对我有用 import java.util.Scanner; public class Main{ public static void main(String args[]){ String text;

我有一个IP地址(字符串)格式为255.255.255.255的代码 并且需要对这些数字(此处未发布)执行一些后处理,但必须将字符串转换为整数数组

我在这里使用了
split()
方法,但没有给出结果。 我在sp上看到了其他关于regex的答案,但没有一个对我有用

import java.util.Scanner;
public class Main{
    public static void main(String args[]){
        String text;

        Scanner take=new Scanner(System.in);
        text=take.nextLine();
        String data[]=text.split(".",4);

        for(String w:data){
            System.out.println(w);
        }
        take.close();
    }
}
我已尝试输入12.36.26.25

但它输出36.26.25,这应该是 12 36 26 25

像这样使用它:

        String example="12.36.26.25";
        String data[]=example.split("\\.");

        for(String w:data){
            System.out.println(w);
        }
它会做你想做的;)


使用split(regex,limit)实际上会在任何字符上进行分割(因为.是任何字符的regex),它基本上会删除前几个字符,使用
java.util.regex
包:

import java.util.regex.*;
public class Main{

     public static void main(String args[]){
        String text = "12.36.26.25";
        String separator = ".";
        String[] data = text.split(Pattern.quote(separator));
        System.out.println(data.length);
        for(String w: data){
            System.out.println(w);
        }
    }
}

Pattern.quote将进行转义。

让我也给你们一个替代解决方案:

public static void main(String args[]){
        String text;

        Scanner take=new Scanner(System.in);
        text=take.nextLine();
        String data[]=text.split("[.]");

        for(String w:data){
            System.out.println(w);
        } 
        take.close();
    }
您可以使用“[.]”作为字符串对点进行转义,将点从正则表达式运算符转换为文字字符

只需更改这一行即可

String data[]=text.split(".",4);


另一种解决方案是使用
sun.net.util.IPAddressUtil
从给定的IPAddress字符串中提取数字,如下所示-

String ipAddressString = "10.20.30.40";
byte[] numbers = IPAddressUtil.textToNumericFormatV4(ipAddressString);

ByteArray格式的数字可以用这个转换成整数数组。

我喜欢“请不要标记为重复”哈哈。请给我一点时间查看代码尝试转义句点(
\\.
),因为它是一个特殊的正则表达式符号(它匹配任何字符)。你能告诉我修改的位置吗?
是正则表达式匹配。使用转义字符。如果你想要一个挑战,写你自己的“分割”方法,就像那一样简单“\\”的意义是什么。你能解释一下吗?让我参考一下这篇文章,并结合Veselin Davidov的回答。它转义了“.”字符。基本上,“.”是任何字符的正则表达式形式如果您不熟悉正则表达式,请查看。。或者只是在谷歌上搜索一下;)对于所有特殊字符,转义\\是必需的。它们是\、^、$、、|、?、*、+、(、)、[、]、{、}
String ipAddressString = "10.20.30.40";
byte[] numbers = IPAddressUtil.textToNumericFormatV4(ipAddressString);