数组问题求解(急求)

h54068650 2012-07-13 03:26:38
小弟现在有一数组的问题未想通的。
我从前台传值到后台(一数组的形式)。数组内的元素为:G111#0001,G111#0002,G111#0003,G222#0001,G222#0002,G222#0003,G555#0001,G666#0001,G666#0002

我想根据上数组的元素得出以下结果G111#0001-0003,G222#0001-0003,G555#0001,G666#0001-0002
我该怎么做?前台传到后台数组元素的元素也不是固定的,求哪位大哥指教
...全文
199 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sammie 2012-07-13
  • 打赏
  • 举报
回复

public static void main(String[] args) {
String[] x = {"G666#0002","G111#0001","G111#0002","G111#0003","G222#0001","G222#0002","G222#0003","G555#0001","G666#0001"};
Arrays.sort(x);
List<String> list = new ArrayList<String>();
String st1 = "";
String st2 = "";
String temp="";
for(int i = 0 ;i<x.length;i++){
st1 = x[i].substring(0, x[i].indexOf('#'));
if(i<x.length-1){
st2 = x[i+1].substring(0, x[i+1].indexOf('#'));
}else{
st2 = "";
}
String end = x[i].substring(x[i].indexOf('#')+1);
if(st2.equals(st1)){
if(temp.equals(""))
temp = end;
}else{
String val = "";
if(!temp.equals(end)){
val= st1+"#"+temp+"-"+end;

} else{
val = st1+"#"+end;
}
list.add(val);
}

}
for(String y : list){
System.out.println("*********"+y);
}
}
}



不管你是什么顺序,不管从什么开始,我就是先排序然后进行一系列操作,不过我这个方法貌似有点拼凑的嫌疑,没想到好方法,互相探讨。
h54068650 2012-07-13
  • 打赏
  • 举报
回复
大哥,万分感谢!
huage 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]
我测试了楼上的代码 如果在给定数组中数据是乱序的 就不行了 当然楼主没那么说
可以使用TreeSet与TreeMap
TreeMap 对key排序 TreeSet对value排序 在遍历TreeSet即可
[/Quote]
所以在开发项目约定大于配置嘛 ,会节省很多东西的
ourmeng19861001 2012-07-13
  • 打赏
  • 举报
回复
我测试了楼上的代码 如果在给定数组中数据是乱序的 就不行了 当然楼主没那么说
可以使用TreeSet与TreeMap
TreeMap 对key排序 TreeSet对value排序 在遍历TreeSet即可
huage 2012-07-13
  • 打赏
  • 举报
回复

String[] ss = {"G111#0001","G111#0002","G111#0003","G222#0001","G222#0002","G222#0003","G555#0001","G666#0001","G666#0002"} ;
Map<String, Map<String, String>> map = new HashMap<String, Map<String, String>>() ;
for (int i = 0; i < ss.length; i++) {
String[] strs = ss[i].split("#");
if(map.containsKey(strs[0])) {
Map<String, String> map2 = map.get(strs[0]) ;
map2.put(strs[1], strs[0]) ;
map.put(strs[0], map2 ) ;
}else{
Map<String, String> map2 = new LinkedHashMap<String, String>() ;
map2.put(strs[1], strs[0]) ;
map.put(strs[0], map2) ;
}
}
System.out.println(map.size());
String s = "" ;
int i = 0 ;
for (String key :map.keySet()) {
Map<String, String> map2 = map.get(key) ;
int j = 0 ;
for(String key2 :map2.keySet()) {
if(j==0)
s=s+ map2.get(key2) +"#"+key2 ;
else
if(j== map2.size()-1)
s= s+"-"+key2 ;
j=j+1;
}
if(i!=map.size()-1)
s=s+",";
i=i+1 ;
}
System.out.println(s);

可以了
h54068650 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:
引用 5 楼 的回复:

引用 4 楼 的回复:
G111#0001,G111#0002,G111#0003,G222#0001,G222#0002,G222#0003,G555#0001,G666#0001,G666#0002是我现在已经从前台传到后台的一个list集合,我需要在后台将数组处理成G111#0001-0003,G222#0001-0003,G55……
[/Quote]
大哥,还在么?
h54068650 2012-07-13
  • 打赏
  • 举报
回复
是有序,只是不一定是从0001开始而已,可能是0002开始,比如说这个数组
G111#0001,G111#0002,G111#0003,G222#0004,G222#0005,G222#0006,G555#0008,G666#0009,G666#0010,G666#0011
那么我需要的结果就是G111#0001-G111#0004,G222#0004-G222#0006,G555#0008,G666#0009-G666#0011
huage 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 5 楼 的回复:

引用 4 楼 的回复:
G111#0001,G111#0002,G111#0003,G222#0001,G222#0002,G222#0003,G555#0001,G666#0001,G666#0002是我现在已经从前台传到后台的一个list集合,我需要在后台将数组处理成G111#0001-0003,G222#0001-0003,G555#0001,G666#000……
[/Quote]
那数据源里的数据是有序吗(比如G111必须是0002,0003这样排的叫有序)?
h54068650 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 4 楼 的回复:
G111#0001,G111#0002,G111#0003,G222#0001,G222#0002,G222#0003,G555#0001,G666#0001,G666#0002是我现在已经从前台传到后台的一个list集合,我需要在后台将数组处理成G111#0001-0003,G222#0001-0003,G555#0001,G666#0001-0002这样的一个St……
[/Quote]
大哥,我并不是固定从0001开始呢,我该怎么去取那个最小的#后面一截呢
h54068650 2012-07-13
  • 打赏
  • 举报
回复
List lotList = new ArrayList();
lotList.add("G111#0002");
lotList.add("G111#0003");
lotList.add("G111#0004");
lotList.add("G222#0005");
lotList.add("G222#0006");
lotList.add("G222#0007");
lotList.add("G555#0009");
lotList.add("G555#0010");
lotList.add("G666#0001");
Map<String, String> map = new HashMap<String, String>() ;
for (int i = 0; i < lotList.size(); i++) {
String a = lotList.get(i).toString();
String[] strs = a.split("#");
map.put(strs[0], strs[1]) ;
}
String [] newSs= new String[map.size()] ;
int i = 0 ;
for (String key :map.keySet()) {
if(map.get(key).equals("0001"))
newSs[i] =key+"#"+"0001" ;
else
newSs[i] =key+"#"+"0001-"+map.get(key) ;
i+=1;
}
for (int j = 0; j < newSs.length; j++) {
String b = newSs[j] + ",";
System.out.print(b);
}
huage 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]
G111#0001,G111#0002,G111#0003,G222#0001,G222#0002,G222#0003,G555#0001,G666#0001,G666#0002是我现在已经从前台传到后台的一个list集合,我需要在后台将数组处理成G111#0001-0003,G222#0001-0003,G555#0001,G666#0001-0002这样的一个String
[/Quote]
可以就我那个代码改动一点就ok 啊
h54068650 2012-07-13
  • 打赏
  • 举报
回复
G111#0001,G111#0002,G111#0003,G222#0001,G222#0002,G222#0003,G555#0001,G666#0001,G666#0002是我现在已经从前台传到后台的一个list集合,我需要在后台将数组处理成G111#0001-0003,G222#0001-0003,G555#0001,G666#0001-0002这样的一个String
huage 2012-07-13
  • 打赏
  • 举报
回复

String[] ss = {"G111#0001","G111#0002","G111#0003","G222#0001","G222#0002","G222#0003","G555#0001","G666#0001","G666#0002"} ;
Map<String, String> map = new HashMap<String, String>() ;
for (int i = 0; i < ss.length; i++) {
String[] strs = ss[i].split("#");
map.put(strs[0], strs[1]) ;
}
String [] newSs= new String[map.size()] ;
int i = 0 ;
for (String key :map.keySet()) {
if(map.get(key).equals("0001"))
newSs[i] =key+"#"+"0001" ;
else
newSs[i] =key+"#"+"0001-"+map.get(key) ;
i+=1;
}
for (int j = 0; j < newSs.length; j++) {
System.out.println(newSs[j]);
}
去试试吧
h54068650 2012-07-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

想问下,你前台是需要G111#0001-0003,G222#0001-0003,G555#0001,G666#0001-0002这样经过处理后的数组,还是原始数组
如果前台需要是需要的已经处理好的,那么就在后台先处理好后在传递给前台
这个后台处理过程不难,无非就是对String和List的操作
[/Quote]
我想后台处理成G111#0001-0003,G222#0001-0003,G555#0001,G666#0001-0002这样,然后在传到前台
haiercs 2012-07-13
  • 打赏
  • 举报
回复
想问下,你前台是需要G111#0001-0003,G222#0001-0003,G555#0001,G666#0001-0002这样经过处理后的数组,还是原始数组
如果前台需要是需要的已经处理好的,那么就在后台先处理好后在传递给前台
这个后台处理过程不难,无非就是对String和List的操作

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧