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

Unable to fetch numbers from string by java split() method

我有这段代码,它采用格式为 255.255.255.255 的 IP 地址(字符串) 并且需要对这些数字执行一些 post 处理(此处未 posted)但必须将字符串转换为整数数组。

我在这里使用了 split() 方法,但它没有给我结果。 我在 sp 上看到其他答案是用正则表达式做的,但 none 对我有用。

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) 实际上会拆分任何字符(因为 . 是任何字符的正则表达式)并且它基本上会删除前几个字符

使用 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);

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

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

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

可以使用此 solution.

将 ByteArray 格式的数字转换为整数数组