【问题标题】:.split() in Java doing something oddJava 中的 .split() 做了一些奇怪的事情
【发布时间】:2014-10-26 17:40:07
【问题描述】:

我正在尝试拆分一串 10 个数字和(可能)字母并将它们放入一个数组中。我知道最好的方法是使用 Java 提供的 .split() 函数。我通常没有问题。但是,我现在在我正在创建的程序中遇到了麻烦。如下面的代码所示,我试图在每个字符处拆分字符串。因此,数组的长度应为 10。但是,.split("") 函数将字符串的开头计算为空格。这会导致程序的其余部分出现问题,因为数组的该索引中没有元素。我怎样才能阻止这种情况发生?

String input = "123456789x";
String[] inputArr = input.split("");
System.out.println("Length: " + inputArr.length);
for(int i=0;i<inputArr.length;i++){
    System.out.println(inputArr[i]);
}

此代码产生以下结果:

Length: 11

(空白索引。实际上不在输出中,它在那里所以你可以看到。否则它将是一个空格)

1

2

3

4

5

6

7

8

9

x

【问题讨论】:

  • 字符串输入 = 123456789x;无效

标签: java arrays string split numbers


【解决方案1】:

结果开头的空字符串是正确的(不幸的是)行为,因为每个字符串之前和之后都有空字符串,并且通过使用split(""),您决定拆分空字符串。也就是说

"foo"

将在标有|的地方分割

"|f|o|o|"

首先会生成数组

["", "f", "o", "o", ""]

但由于split 默认情况下也会删除尾随的空字符串,它返回的数组没有最后一个空字符串,但保留前面的那个

["", "f", "o", "o"]

This behaviour was improved in Java 8 所以"foo".split("") 返回["f", "o", "o"] 但是如果你想在 Java 8 之前的版本中获得相同的结果,你需要明确地说你想分割每个空字符串 除了有之后/之前的字符串开始。为此,您可以使用环顾四周

yourString.split("(?!^)");

其他替代方法是使用char[] 数组代替String[] 数组,该数组将保存字符串中的字符。要获得这样的数组,您可以简单地调用:

char[] letters = yourString.toCharArray();

【讨论】:

    【解决方案2】:
    String[] inputArr = input.split("(?!^)");
    

    【讨论】:

      猜你喜欢
      • 2019-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-07
      • 2015-01-02
      • 1970-01-01
      相关资源
      最近更新 更多