java中split()方法分割字符串后数组长度问题

由于自学java过程中碰到了关于split()方法的一些”奇怪“之处,花费了好大的时间和精力才搞定,看了看网上的资源也很少有关于分割后数组长度的帖子,所以为了积累也为了给广大学者们提个醒,不要再入坑了,不多说了,上代码:

我的思路是将一个字符串拆成一个数字字符串数组和字母字符串数组,最后将数字字符串转换成int类型的数组:

public class String2Int {
	public static void main(String[] args){
		String string = "A1B2C3D4E5F6G7H8";
		int[] num =new int[8];
		String[] num_string = string.split("\\D");
		System.out.println(num_string[0]);
		System.out.println("提取数字后的数组元素为:");
		for(int i=0;i<num_string.length;i++){
			num[i] = Integer.parseInt(num_string[i]);
			System.out.print(num[i]);
		}
	}
}
运行结果为:

控制台显示错误是格式不正确,在string转int时,包含了” “,我当时就纳闷了,分割后的数组里包含的是”1,2,3,4,5,6,7,8“,哪里来的” “,后来我把分割后储存结果的num_string[ ]数组长度输出来:长度是9,如图


看了之后我就更纳闷了,明明只有8个string类型的数组元素,长度怎么会是9 呢?后来我又把程序改成了这样:

public class String2Int {
	public static void main(String[] args){
		String string = "1A2B3C4D5E6F7G8H";
		int[] num =new int[8];
		String[] num_string = string.split("\\D");
		System.out.println(num_string[0]);
		System.out.println("提取数字后的数组元素为:");
		for(int i=0;i<num_string.length;i++){
			num[i] = Integer.parseInt(num_string[i]);
			System.out.print(num[i]);
		}
	}
}

没错,我就只是改了原字符串,改成了1A2B3C4D5E6F7G8H,把数字和字母颠倒了顺序,之后又输出了分割后储存结果的num_string[ ]数组长度:

结果是:8

再把原字符串改成,AA1B2C3D4E5F6G7H8继续输出分割后的数组长度:结果为10,到这里估计读者应该看出来了,split()方法分割后的数组是这样存储的:从数组第0位开始存储,假如原字符串的0位符合分割条件,就从新数组的0位开始存储,如果原字符串0位不符合分割条件,就从符合分割条件的那一位开始存储,之前的位都存储为空。拿之前程序为例子,原字符串为”A1B2C3D4E5F6G7H8“,而我分割条件为数字,所以原字符串的0位不符合我的分割条件,所以就从新数组第1位开始存储1,第二位存储2,以此类推,那么第0位就存储空格,之所以程序输出新数组长度是9,多的就是第0位的空格!再举个例子,原字符串为”AA1B2C3D4E5F6G7H8“,第0位不符合条件,第1位也不符合条件,可是第2位符合,所以就在新数组的第2位开始存储1,之前的0位和1位都存储空格!

所以程序要改成这样才能保证不会将” “转成int类型,或者数组越界

public class String2Int {
	public static void main(String[] args){
		String string = "A1B2C3D4E5F6G7H8";
		int[] num =new int[8];
		String[] num_string = string.split("\\D");
		System.out.println(num_string[0]);
		System.out.println("提取数字后的数组元素为:");
		for(int i=0;i<num_string.length-1;i++){
			num[i] = Integer.parseInt(num_string[i+1]);
			System.out.print(num[i]);
		}
	}
}
运行结果:

搞定!!!希望此贴可以帮助大家,谢谢!
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值