从“统计一个字符在字符串中所有的位置”看数组的扩展有关问题

从“统计一个字符在字符串中所有的位置”看数组的扩展问题

我们先明确一点,Java数组对象的大小是固定的,数组对象是丌能扩展的,我们利用数组复制的方法可以变通的实现数组扩展。创建数组副本的同时将数组长度增加就变通的实现了,数组的扩展。
 System.arraycopy() 可以复制数组
 Arrays.copyOf() 可以简便的创建数组副本

统计一个字符在字符串中所有的位置。比如"统计一个字符在字符串中所有的位置"这个字符串中的"字"出现2次,分别出现在下标4和7的位置。要求,将下标位置放入到一个int数组中,每找到一个就放入并对数组扩容。

import java.util.Arrays;

public class CharCountDemo {

	/**
	 * 统计一个字符在字符串中所有的位置。比如"统计一个字符在字符串中所有的位置"这个字符串中的"字"出现2次,
	 * 分别出现在下标4和7的位置。要求,将下标位置放入到一个int数组中,每找到一个就放入并对数组扩容。
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
       String str="统计一个字符在字符串中所有的位置";
       int[]arr=countAll(str,'字');
       System.out.println(Arrays.toString(arr));
	}

	private static int[] countAll(String str, char ch) {
		// TODO Auto-generated method stub
		int []ary={};
		for(int i=0;i<str.length();i++){
			char c=str.charAt(i);
			if(c==ch){
				ary=Arrays.copyOf(ary, ary.length+1);
				//标记所在的位置,并存入数组
				ary[ary.length-1]=i;
			}
		}
		return ary;
	}

}