J2ME里获取级联关系的菜单

 本文以具有5级关联的菜单项为例,介绍在J2ME如何获取这些具有级联关系的菜单。

代码可以直接运行,缺点是用Hashtable保存的数据,重新获取后并不按照原来的顺序显示出来,如果需要按照一定的顺序就需要用Vector。

package  test;

import  java.io.ByteArrayInputStream;
import  java.io.ByteArrayOutputStream;
import  java.io.InputStream;
import  java.util.Enumeration;
import  java.util.Hashtable;

public   class  ParseOperation  {

    Hashtable ht 
= new Hashtable();        // 保存一级范围内的业务
    Hashtable h1;                        // 保存二级范围内的业务
    Hashtable h2;                        // 保存三级范围内的业务
    Hashtable h3;                        // 保存四级范围内的业务
    Hashtable h4;                        // 保存五级范围内的业务

    
/**
     * 解析业务代码(字符串)
     * 
@param str0 业务代码
     
*/

    
private void parseString(String str0){
        
try {

            InputStream is 
= new ByteArrayInputStream(str0.getBytes());
            ByteArrayOutputStream bstr 
= new ByteArrayOutputStream(); 

            
boolean start = false;        // 是否开始有片断的业务代码了,以'<>'为标志
            boolean end = false;        // 是否结束该片断的业务代码了,以'</>'为标志
            boolean isNext = false;        // 是否在'<'之后紧接着的字符就是'/'
            int c;
            String con1 
= "";            // 一级业务的名称
            String con2 = "";            // 二级业务的名称
            String con3 = "";            // 三级业务的名称
            String con4 = "";            // 四级业务的名称
            String con5 = "";            // 五级业务的名称    
            String version = "";        // 业务代码当前的版本号
            int classes = -1;            // 业务的等级,指向'<'与'>'之间的数字
            int type = 0;                // 当前的业务类型,比如1代表'放号业务',2代表'套卡销售'等

            
while ((c = is.read()) != -1{
                
switch (c) {
                
case '$':
                    isNext 
= false;
                    version 
= new String(bstr.toByteArray());
                    bstr.reset();
                    System.out.println(
"------- 开始分析 -------");
                    System.out.println(
"当前的版本号为: " + version);
                    
break;
                
case '<':
                    isNext 
= true;
                    
switch (classes){
                    
case 0:
                        type 
= Integer.parseInt(new String(bstr.toByteArray()));
                        bstr.reset();
                        System.out.println(
" 当前业务代码的类型级别为: " + type);
                        
break;
                    
case 1:
                        con1 
= new String(bstr.toByteArray());
                        bstr.reset();
                        System.out.println(
"发现一级业务: " + con1);
                        
break;
                    
case 2:
                        con2 
= new String(bstr.toByteArray());
                        bstr.reset();
                        System.out.println(
"发现二级业务: " + con2);
                        
break;
                    
case 3:
                        con3 
= new String(bstr.toByteArray());
                        bstr.reset();
                        System.out.println(
"发现三级业务: " + con3);
                        
break;
                    
case 4:
                        con4 
= new String(bstr.toByteArray());
                        bstr.reset();
                        System.out.println(
"发现四级业务: " + con4);
                        
break;
                    
case 5:
                        con5 
= new String(bstr.toByteArray());
                        bstr.reset();
                        System.out.println(
"发现五级业务: " + con5);
                        
break;
                    }

                    start 
= true;
                    
break;
                
case '>':
                    isNext 
= false;
                    
if (start) {
                        classes 
= Integer.parseInt(new String(bstr.toByteArray()));
                        
switch(classes){
                        
case 1:
                            h1 
= new Hashtable();
                            
break;
                        
case 2:
                            h2 
= new Hashtable();
                            
break;
                        
case 3:
                            h3 
= new Hashtable();
                            
break;
                        
case 4:
                            h4 
= new Hashtable();
                            
break;
                        }

                        bstr.reset();
                        start 
= false;
                    }

                    
if(end){
                        classes 
= Integer.parseInt(new String(bstr.toByteArray()));
                        
switch(classes){
                        
case 1:
                            ht.put(con1, h1);
                            
break;
                        
case 2:
                            h1.put(con2, h2);
                            
break;
                        
case 3:
                            h2.put(con3, h3);
                            
break;
                        
case 4:
                            h3.put(con4, h4);
                            
break;
                        
case 5:
                            h4.put(con5, 
"");
                            
break;
                        }

                        classes 
= -1;
                        bstr.reset();
                        end 
= false;
                    }

                    
break;
                
case '/':
                    
if(isNext){
                        end 
= true;
                        start 
= false;
                        isNext 
= false;
                    }
else{
                        bstr.write((
char) c);
                    }

                    
break;
                
default:
                    isNext 
= false;
                bstr.write((
char) c);
                
break;
                }


            }

            is.close();
            bstr.close();
        }
 catch (Exception e) {
            e.printStackTrace();
        }

    }


    
public void relation(){
        
try{
            System.out.println(
" ------ 级联读取数据 ------");
            System.out.println(
"ht.size(): " +ht.size());
            Enumeration e1 
= ht.keys();
            
while(e1.hasMoreElements()){
                String s1 
= (String)e1.nextElement();
                System.out.println(
"1--------- " + s1);
                Hashtable t2 
= (Hashtable)ht.get(s1);
                Enumeration e2 
= t2.keys();

                
while(e2.hasMoreElements()){
                    String s2 
= (String)e2.nextElement();
                    System.out.println(
"  2------- " + s2);
                    Hashtable t3 
= (Hashtable)t2.get(s2);
                    Enumeration e3 
= t3.keys();

                    
while(e3.hasMoreElements()){
                        String s3 
= (String)e3.nextElement();
                        System.out.println(
"    3----- " + s3);
                        Hashtable t4 
= (Hashtable)t3.get(s3);
                        Enumeration e4 
= t4.keys();

                        
while(e4.hasMoreElements()){
                            String s4 
= (String)e4.nextElement();
                            System.out.println(
"      4--- " + s4);
                            Hashtable t5 
= (Hashtable)t4.get(s4);
                            Enumeration e5 
= t5.keys();

                            
while(e5.hasMoreElements()){
                                String s5 
= (String)e5.nextElement();
                                System.out.println(
"        5- " + s5);
                            }

                        }

                    }

                }

            }

        }
catch(Exception ee){
            ee.printStackTrace();
        }

    }


    
public static void main(String[] args){
        ParseOperation po 
= new ParseOperation();

        String str 
= "1.0$<1>一级业务<2>二级业务A<3>11100|三级业务A1</3><3>11200|三级业务A2</3>" +
        
"</2><2>二级业务B<3>12100|三级业务B1</3><3>12200|三级业务B2</3></2></1>" + 
        
"<1>QQ<2>QQ-WW><3>31100|QQ-WW-301</3><3>QQ-WW-302<4>QQ-WW-302-401" +
        
"<5>31211|QQ-WW-302-401-501</5></4></3><3>QQ-WW-303><4>31310|QQ-WW-303-401</4>" +
        
"</3></2><2>QQ/(2)<3>QQ/(2)/(3A)</3><3>QQ/(2)/(3B)</3></2></1>";
        po.parseString(str);
        po.relation();
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值