【问题标题】:Regarding split() method in Java String API [duplicate]关于 Java String API 中的 split() 方法 [重复]
【发布时间】:2015-05-27 12:36:31
【问题描述】:

我编写了以下 Java 代码来测试 String API 中的 split() 方法。

import java.util.Scanner;

public class TestSplit {
    public static void main(String[] args) {
        String str = "10 5";
        String[] integers = str.split(" ");
        int numOfInt = integers.length;

        for (int i = 0; i < numOfInt; i++) {
           System.out.println(integers[i]);
        }
     }
}

我注意到上面的代码给了我一个输出
10
5
这是意料之中的。
但是,如果我将str 的内容更改为" 10 5",那么我得到
<br>10
5
作为输出。我不明白为什么输出与上面的不同。如果我使用" " 作为分隔符来拆分str,那么我认为所有" " 都会被忽略。那么我的输出中的额外空间是什么?

编辑:我尝试了" 10 5" 并得到了
<br><br>10
5
作为输出。

【问题讨论】:

  • 不是多余的空间;这是一个长度为零的字符串。
  • 不,每个空格都会创建一个新字段。尝试10 5(两个数字之间有2个空格)进行另一个实验。
  • 他们不会忽略它,它只是在分隔符的每个实例上拆分字符串,无论它是否有内容。
  • 因为数组的第一个元素是“”,第二个是“10”,第三个是“5”。如果分隔符位于索引 0,Split 会将 "" 作为第一个字符。

标签: java string


【解决方案1】:

如果您有一个分隔符作为第一个字符,split 将返回一个空字符串作为输出数组的第一个元素(即" 10 5".split(" ") 返回数组{"","10","5"})。

同样,如果你有两个连续的分隔符,split 将产生一个空字符串。所以"10 5".split(" ") 会产生数组{"10","","5"}。

如果您希望忽略前导和尾随空格,请将str.split(" "); 更改为str.trim().split(" ");。

【讨论】:

  • 考虑str = ",10,,,5,".split(",")。第一个字符是分隔符',',因此我们将其前面的标记"" 添加到数组str 中。那么剩下的字符串就是:"10,,,5,"。现在第一个字符不是',',所以我们继续直到找到',',并将之前的标记"10" 添加到数组str。现在我们只剩下",,5,"。第一个字符是',',所以我们将之前的标记"" 添加到str,然后重复下一个字符,也就是','。
  • (续)最后我们只剩下“5”了。第一个字符'5' 不是",",所以我们继续到',' 并将之前的标记"5" 添加到字符串中,我们就完成了。所以str = {"", "10", "", "", "5"}?这就是这里发生的事情吗?
  • @Vizuna 是的,这就是这里发生的事情。
猜你喜欢
  • 2014-09-06
  • 2011-12-17
  • 2014-07-12
  • 2015-12-01
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-21
相关资源
最近更新 更多