【问题标题】:String.split(String pattern) Java method is not working as intendedString.split(String pattern) Java 方法未按预期工作
【发布时间】:2014-02-19 08:45:15
【问题描述】:

我使用 String.split() 将一些字符串划分为 IP,但它的 returning an empty array,所以我使用 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();
}

它应该返回一个String[] as {"196"."168"."0"."1"}....

【问题讨论】:

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

标签: java string split string-split


【解决方案1】:

split 适用于正则表达式。 '。'在正则表达式表示法中是单个字符。要使用 split 在实际点上进行拆分,您必须像这样对其进行转义:split("\\.")。

【讨论】:

    【解决方案2】:

    使用

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

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

    【讨论】:

      【解决方案3】:

      你的陈述

      lista[c].split(".")
      

      会将第一个字符串 "196.168.0.1" 拆分为任意 (.) 字符,因为 String.split 将 regular expression 作为参数。

      然而,关键是你得到一个空数组的原因是,拆分也会删除结果中所有尾随的空字符串。

      例如,考虑以下语句:

      String[] tiles = "aaa".split("a");
      

      这会将字符串拆分为三个空值,例如[ , , ]。由于后面的空值将被删除,因此数组将保持为空[]。

      如果你有以下陈述:

      String[] tiles = "aaab".split("a");
      

      它将字符串分成三个空值和一个填充值b,如[ , , , "b"] 由于没有尾随空值,因此结果将保留这四个值。

      要摆脱这样一个事实,即您不想拆分每个字符,您必须像这样转义正则表达式:

      lista[c].split("\\.")
      

      【讨论】:

        【解决方案4】:

        String.split() 将正则表达式作为参数,因此您必须转义句点(匹配任何内容)。所以请改用split("\\.")。

        【讨论】:

          【解决方案5】:

          这可能会对您有所帮助:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-08-15
            • 1970-01-01
            • 1970-01-01
            • 2020-08-11
            • 1970-01-01
            • 2019-04-22
            • 2015-01-28
            • 1970-01-01
            相关资源
            最近更新 更多