给你一个笨办法。String str[]={"asd","1sdf","sfe","asd","ddd","sss","ddd","sss","wer","erw"}; List<String> list = new ArrayList<String>(); Map<String, Integer> map = new HashMap<String, Integer>(); for(int i =0; i < str.length; i++){ if(!list.contains(str[i])){ list.add(str[i]); map.put(str[i], 1); }else{ int k = map.get(str[i]); map.put(str[i], k + 1); } }然后有多少个map就是有多少个数组,map的value就是表示这个数组值出现了多少次。
总觉得这需求好怪。 打印结果: [1sdf] [asd, asd] [ddd, ddd] [erw] [sfe] [sss, sss] [wer] public static void main(String[] args) { String str[] = { "asd", "1sdf", "sfe", "asd", "ddd", "sss", "ddd", "sss", "wer", "erw" }; Set<String> set = new HashSet<String>(); Map<String, Integer> map = new TreeMap<String, Integer>(); for (String s : str) { if (set.add(s)) { map.put(s, 1); } else { map.put(s, map.get(s) + 1); } } int size = map.size(); int i = 0; String[][] result = new String[size][]; for (String key : map.keySet()) { if (map.get(key) == 1) { result[i] = new String[] { key }; } else { result[i] = new String[map.get(key)]; for (int j = 0; j < map.get(key); j++) { result[i][j] = key; } } i++; } for (String[] s : result) { System.out.println(Arrays.toString(s)); } }
就像这样,a1={asd,asd};
a2={1sdf};
a3={sfe};
a4={ddd};要达到这样的目的,如何动态的创建数组a1到an
楼主你的a1就是map("asd",2)
a2就是map("1sdf",1)
等等
如果你单纯的需要数组的话
用map<String,String[]>也行
不过你既然知道了数字比如("asd",2)
在自己生成长度为2的数组不是更好么?
比如
String str[]={"asd","1sdf","sfe","asd","ddd","sss","ddd","sss","wer","erw"};最后你想得到什么样的结果。
a2={1sdf};
a3={sfe};
a4={ddd,ddd};
a5={sss,sss};
a6={wer};
a7={erw};
字符串数组str的长度不确定,数组a1到an的个数和值也都不确定。我的目的是如何循环创建a1到an这些数组。数组里面的值是无关紧要的。
List<String> list = new ArrayList<String>();
Map<String, Integer> map = new HashMap<String, Integer>();
for(int i =0; i < str.length; i++){
if(!list.contains(str[i])){
list.add(str[i]);
map.put(str[i], 1);
}else{
int k = map.get(str[i]);
map.put(str[i], k + 1);
}
}然后有多少个map就是有多少个数组,map的value就是表示这个数组值出现了多少次。
打印结果:
[1sdf]
[asd, asd]
[ddd, ddd]
[erw]
[sfe]
[sss, sss]
[wer]
public static void main(String[] args) { String str[] = { "asd", "1sdf", "sfe", "asd", "ddd", "sss", "ddd", "sss", "wer", "erw" };
Set<String> set = new HashSet<String>();
Map<String, Integer> map = new TreeMap<String, Integer>(); for (String s : str) {
if (set.add(s)) {
map.put(s, 1);
} else {
map.put(s, map.get(s) + 1);
}
} int size = map.size();
int i = 0;
String[][] result = new String[size][]; for (String key : map.keySet()) {
if (map.get(key) == 1) {
result[i] = new String[] { key };
} else {
result[i] = new String[map.get(key)];
for (int j = 0; j < map.get(key); j++) {
result[i][j] = key;
}
}
i++;
} for (String[] s : result) {
System.out.println(Arrays.toString(s));
}
}
String str[]={"asd","1sdf","sfe","asd","ddd","sss","ddd","sss","wer","erw"}; public void equalsArr(Vector<String[]> vt, String str){ for(int i=0; i<vt.size(); i++){
if(vt.elementAt(i)[0].equals(str)){
vt.add(i, addData(vt.elementAt(i), str));
return;
}
}
vt.add(new String[]{str});
}
//增加数据
public String[] addData(String[] cc, String str){
String ss[] = new String[cc.length+1];
System.arraycopy(cc, 0, ss, 0, cc.length);
ss[ss.length-1] = str;
return ss;
} public static void main(String str[]){ Vector<String[]> cc = new Vector<String[]>();
Array array = new Array();
for(int i=0; i<str.length; i++){
array.equalsArr(cc, str[i]);
}}
在JAVA里面不能动态改变数组的长度,初始化时数组是多长就永远是多长,除非你重新给它new一个
动态的创建数组方法是:new String[5]; 或者 new String[]{"ads"};
数组创建出来还要保存他的引用地址,一般我们平常都是String str[] = new String[5]; 这样就是把地址给赋给了str[] 相当于指针
我这里是每创建一个数组都把他的地址放到Vector里面了,