for(int i=0;i<list.size();i++)
{
String s=(String)list.get(i);
out.println(s);
}
打印结果为:
强磁1,低电压1
强磁1
强磁1
低电压2
强磁5
低电压7
低电压12
有没有什么方法能得到这样一个字符串
强磁8,低电压22因为这段代码已经是写在第2个for循环里了,所以效率越高越好
{
String s=(String)list.get(i);
out.println(s);
}
打印结果为:
强磁1,低电压1
强磁1
强磁1
低电压2
强磁5
低电压7
低电压12
有没有什么方法能得到这样一个字符串
强磁8,低电压22因为这段代码已经是写在第2个for循环里了,所以效率越高越好
因为一开始并不知道会有强磁,低电压
所以if(s.substring().equals("强磁")) 这样子不行
List list = new ArrayList();
list.add("强磁");
list.add("强磁");
list.add("强磁");
list.add("强磁");
list.add("低电压");
list.add("低电压");
list.add("低电压");
HashMap map = new HashMap();
for(int i = 0; i < list.size(); i++) {
String key = list.get(i).toString();
if(!map.containsKey(key)) {
map.put(key, 1);
} else {
int value = Integer.valueOf(map.get(key).toString());
map.remove(key);
map.put(key, ++value);
}
}
Iterator iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = iterator.next().toString();
System.out.println("key---->" + key);
String value = map.get(key).toString();
System.out.println("value---->" + value);
}
你的字符串怎么本来就有数字跟在后面了????
根据你的想法,写了一个,可能不完全合适,但是实现思想就这样,自己改改把
你的问题没有说明白,或者说有点矛盾。
如果强磁换为aaa
低电压换为bbb
请问你想得到的结果是什么?
强磁1
强磁1
低电压2
强磁5
低电压7
低电压12
xxx3,yyy4,zzz5 强磁1,低电压1 表示强磁出现1次,低电压出现1次
我需要在最后做一个统计,强磁和低电压总共各出现了几次
即“强磁8,低电压22,xxx3,yyy4,zzz5 ”
void main(List list){
HashMap result = new HashMap(); for(int i=0;i <list.size();i++)
{
String s=(String)list.get(i);
dealARow(s, result);
} //输出result
}
void dealARow(String s, HashMap map)
{
String [] array = s.split(",");
for(int i = 0; i < array.length; i++){
String record = array[i];
dealARecord(record, map);
}
}void dealARecord(String record, HashMap map)
{
String record_name = ...;// 取得描述
int record_qty = ....;//取得数量
Integer total = (Integer)map.get(record_name);
if(total == null)
{
total = Integer.valueOf(record_qty);
}else
{
total = total + record_qty;
}
map.put(record_name, total);
}
List list = new ArrayList();
list.add("强磁1");
list.add("低电压4"); list.add("强磁1");
list.add("低电压1");
list.add("强磁1");
list.add("强磁1"); int count1 = 0, count2 = 0;
String temp1 = "", temp2 = "";
for (int i = 0; i < list.size(); i++) {
String s = (String) list.get(i);
if (s.indexOf("强磁") != -1) {
s = s.replace("强磁", "");
count1 += Integer.parseInt(s);
temp1 = "强磁" + count1;
}
if (s.indexOf("低电压") != -1) {
s = s.replace("低电压", "");
count2 += Integer.parseInt(s);
temp2 = "低电压" + count2;
}
}
System.out.println(temp1 + "," + temp2);
}
public static void main(String[] str)
{
List list=new ArrayList();
list.add("强磁1,低电压1");
list.add("强磁2,低电压3");
list.add("强磁4");
list.add("低电压5");
list.add("低电压6");
list.add("强磁1,低电压7");
list.add("强磁11");
list.add("阿阿阿阿2,阿阿阿3,阿阿4");
HashMap result = new HashMap();
for(int i=0;i <list.size();i++)
{
String s=(String)list.get(i);
dealARow(s, result);
} System.out.println(result.toString());
//输出result
}
public static void dealARow(String s, HashMap map)
{
String [] array = s.split(",");
for(int i = 0; i < array.length; i++){
String record = array[i];
dealARecord(record, map);
}
} public static void dealARecord(String record, HashMap map)
{
String record_name = null;// 取得描述
int record_qty = 0;//取得数量
Integer total = (Integer)map.get(record_name);
if(total == null)
{
total = Integer.valueOf(record_qty);
}else
{
total = total + record_qty;
}
map.put(record_name, total);
}
}
int record_qty = 0;//取得数量 这样当然是0啊. 你要计算这两个值啊.等等给你完全代码.
{
List list=new ArrayList();
list.add("强磁1,低电压1");
list.add("强磁2,低电压3");
list.add("强磁4");
list.add("低电压5");
list.add("低电压6");
list.add("强磁1,低电压7");
list.add("强磁11");
list.add("阿阿阿阿2,阿阿阿3,阿阿4"); HashMap result = new HashMap(); for(int i=0;i <list.size();i++)
{
String s=(String)list.get(i);
dealARow(s, result);
} System.out.println(result.toString());
//输出result
}
public static void dealARow(String s, HashMap map)
{
String [] array = s.split(",");
for(int i = 0; i < array.length; i++){
String record = array[i];
dealARecord(record, map);
}
} public static void dealARecord(String record, HashMap map)
{
int index = findNumberIndex(record);
if(index < 0)
{
return;
}
String record_name = record.substring(0, index);// 取得描述
int record_qty = Integer.parseInt(record.substring(index));//取得数量
Integer total = (Integer)map.get(record_name);
if(total == null)
{
total = Integer.valueOf(record_qty);
}else
{
total = total + record_qty;
}
map.put(record_name, total);
}
private static int findNumberIndex(String s) {
s = s.trim();
for(int i = 0; i< s.length(); i ++)
{
char c = s.charAt(i);
if(c>='1' && c <='9' )
{
return i;
}
}
return -1;
}
Pattern p = Pattern.compile("\\d");
Matcher m = p.matcher(s);
if(m.find())
{
return m.start();
}
return -1;
}
说下思路吧
楼主可以先检查每个字符串中那些是数字,取出来赋值给NUM,然后把数字和前面的内容分开赋值给NAME。
分别装入一个JAVABEAN(name,num),
然后把JAVABEAN放入LIST对象M中。
最后根据不同的NAME去建立个COUNT对象。
并把相同NAME的NUM对象递加,赋值给COUNT。
在把取得的NAME,count最后放入LIST供外面打印!
List list = new ArrayList();
list.add("强磁1");
list.add("低电压4");
list.add("强磁1");
list.add("低电压1");
list.add("强磁2");
list.add("强磁3,低电压12,强磁2,强磁5");
for(int i=0;i <list.size();i++)
{
String s=(String)list.get(i);
String[] sp=s.split(",");//分解"强磁3,低电压12"形式
for(String e:sp){//对每一个"强磁3"形式
String[] ss=e.split("(?<!\\d+)(?=\\d+$)");
int v=Integer.parseInt(ss[1]);//取出整数值
//统计各个字符串总数
hm.put(ss[0], hm.get(ss[0])==null?
v:
(v+hm.get(ss[0])) ) ;
}//for(e)
} //for
//最后形成楼主要的"低电压17,强磁14"的形式
String rs=hm.toString().replaceAll("\\{|\\}|=| ", "");
System.out.println("最后结果:"+rs);程序运行结果:
最后结果:低电压17,强磁14