【问题标题】:How to verify if a string.split() returns null如何验证 string.split() 是否返回 null
【发布时间】:2013-02-13 13:42:33
【问题描述】:

我正在从文件中读取数据:

Some Name;1|IN03PLF;IN02SDI;IN03MAP;IN02SDA;IN01ARC
Some Other Name;2|IN01ALG;IN01ANZ
Another Name;3|
Test Testson;4|IN03MAP;IN01ARC;IN01ALG

我从该文件中读取的每一行都使用 string.split(),如下所示:

String args[]         = line.split("\\|");                  
String candidatArgs[] = args[0].split(";");

if (args[1] != "" || args[1] != null) { 

    String inscrieriString[] = args[1].split(";");

事情是:当我在.split("\\|") 之后到达Another Name;3| 时,第二部分(args[1])应该是空的,null""(我真的不知道)。

但是我在if (args[1] != "" || args[1] != null) 上得到一个数组索引越界错误(同样,在:Another Name;3|

【问题讨论】:

  • 从您发布的示例数据中可以获得长度为 1 的 String.split 数组。您需要在代码中对此进行边界检查。

标签: java string-split


【解决方案1】:

args 中只有一个元素。

if (args.length > 1) { 字符串 inscrieriString[] = args[1].split(";"); }

【讨论】:

  • 这太疯狂了(正确..但仍然很疯狂)。如果数组为空,它的长度为1。如果有一个元素,它的长度为2? VB不好
  • 我不认为这是检查拆分操作是否成功的最可靠方法。如果分隔符仅出现在字符串的开头或结尾,则数组的长度仍为 1,但拆分操作会成功。
【解决方案2】:

您需要检查args 数组的长度。

String.split() 为您的第三行返回一个长度为 1 的数组,因此 args[1] 超出范围。 您还应该使用String.isEmpty() 而不是!= ""

您甚至可以跳过额外的检查 - 检查数组长度就足够了:

if (args.length > 1) {
    String inscrieriString[] = args[1].split(";");
    ...
}

【讨论】:

  • 确实,检查您的 args 数组大小是否 > 1。如果不是,请执行代码。
【解决方案3】:

在拆分时检查args的长度,如果长度允许则只访问另一个索引(如果args.length > 1)。

在这种情况下:

String line = "Another Name;3|"; //simplified for the example
line.split("\\|");

它将返回这个数组:

{ "Another Name;3" }

【讨论】:

    【解决方案4】:

    试试

    String args[]         = line.split("\\|",2);                  
    String candidatArgs[] = args[0].split(";");
    
    if (args.length==2) 
        String inscrieriString[] = args[1].split(";");
    

    【讨论】:

      【解决方案5】:

      args[1] 不为空或 null。它超出了数组的范围。

      System.out.println("Another Name;3|".split("\\|").length);
      

      您需要在使用前检查数组的长度。

      【讨论】:

        【解决方案6】:

        我认为你可以测试 args 的长度,它应该返回 1 或 2。如果是 1,你就知道没有 args[1]。

        【讨论】:

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