将Java';s split是否覆盖数组的长度,即使它已预初始化?
第四行抛出数组索引越界异常。即使数组的长度为4。 在这种情况下如何处理?不,数组的长度不是4。数组的长度为3,因为它是拆分操作的结果 您的代码实际上只是:将Java';s split是否覆盖数组的长度,即使它已预初始化?,java,arrays,Java,Arrays,第四行抛出数组索引越界异常。即使数组的长度为4。 在这种情况下如何处理?不,数组的长度不是4。数组的长度为3,因为它是拆分操作的结果 您的代码实际上只是: String [] arr = {" "," "," "," "}; // String arr = new String[4]; String splitThis = "Hello, World, There"; arr = splitThis.split(","); arr[3] = "YAY"; 一旦你给一个变量赋值,它以前的值
String [] arr = {" "," "," "," "}; // String arr = new String[4];
String splitThis = "Hello, World, There";
arr = splitThis.split(",");
arr[3] = "YAY";
一旦你给一个变量赋值,它以前的值就不重要了。split
方法返回对数组的引用,您将该引用分配给arr
。split
方法不知道变量的前一个值-它完全独立于您随后对值所做的操作-因此它不仅仅是填充现有数组的一部分
如果你想要这种行为,你可以用这样的方式:
String splitThis = "Hello, World, There";
String[] arr = splitThis.split(",");
arr[3] = "YAY";
或者,您可能需要一个列表
,以便以后可以添加项目:
String[] array = { " ", " ", " ", " " }; // Or fill however you want
String splitThis = "Hello, World, There";
String[] splitResults = splitThis.split(",");
System.arraycopy(splitResults, 0, array, 0,
Math.min(array.length, splitResults.length));
String splitThis=“你好,世界,那里”;
List List=newarraylist(Arrays.asList(splitThis.split(“,”));
添加(…);
这将创建一个新数组,并将其分配给覆盖先前初始化数组的arr变量
String splitThis = "Hello, World, There";
arr = splitThis.split(",");
arr[3]
将引发异常。新数组的长度将仅为3。旧数组将无效。尝试写入此新数组的位置4将超出范围并导致异常
您必须先将数组项添加到
列表中
,然后才能添加新项。您意识到split()
返回一个完全不同的数组,对吗?因此arr
指向与原始数组不同的数组。分配数组变量不会写入数组;它会将变量指向新数组。谢谢,我没有意识到这一点。因此,如果我想添加更多数据,如数组第三个索引中的日期,我可以这样做吗?@user3759100:无法将任何内容添加到split
返回的数组中,因为数组的长度是固定的-一旦创建了数组,无论它来自何处,都无法将其添加到数组中。也许您想要一个列表?@JonSkeetarray.max()有多么美妙的用途
!+1当然!@shekharsuman:哎呀,应该是Math.min
,而不是Math.max
!@JonSkeet-hahahaha!!!抱歉,Math.max()第一次通知!我也指出了错误,抱歉!
String splitThis = "Hello, World, There";
arr = splitThis.split(",");
arr[0] = "Hello"
arr[1] = " World"
arr[2] = " There"