【问题标题】:Unable to fetch numbers from string by java split() method无法通过 java split() 方法从字符串中获取数字
【发布时间】:2019-07-05 20:20:18
【问题描述】:

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

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

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

【问题讨论】:

  • 我喜欢“请不要标记为重复”哈哈。给我一秒钟看看代码
  • 尝试转义句点 (\\.),因为它是一个特殊的正则表达式符号(它匹配任何字符)。
  • 你能告诉我把修改放在哪里吗?
  • . 是正则表达式匹配。使用转义字符。
  • 如果您想挑战,请编写自己的“拆分”方法

标签: java array-algorithms


【解决方案1】:

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

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

可以使用solution将字节数组格式的数字转换为整数数组。

【讨论】:

    【解决方案2】:

    只需更改此行

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

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

    【讨论】:

    • 所有特殊字符都需要转义 \\。它们是 \, ^, $, ., |, ?, *, +, (, ), [, ], {, }
    【解决方案3】:

    使用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 将进行转义。

    【讨论】:

      【解决方案4】:

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

      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();
          }
      

      您可以使用“[.]”作为字符串转义点,将点从正则表达式运算符转换为文字字符

      【讨论】:

        【解决方案5】:

        像这样使用它:

                String example="12.36.26.25";
                String data[]=example.split("\\.");
        
                for(String w:data){
                    System.out.println(w);
                }
        

        它会做你想做的;)

        像你一样使用 split(regex,limit) 实际上会拆分任何字符(因为 . 是任何字符的正则表达式)并且它基本上会删除前几个字符

        【讨论】:

        猜你喜欢
        • 2016-07-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多