成's profile秀出美味PhotosBlogLists Tools Help

成 黄

Occupation
Lists

秀出美味

November 21

JSON简单操作

     终于得空回来了,实验室的事情开始慢慢浮出水面了,隔三差五的做报告,可心里确想着一大堆开发的事情,真是一个乱啊。憋了几天终于憋不住了,把在项目中没时间做的事情之一给结束了。
     在项目中,一直想要一个能对Json数据在Java中操作自如的方法,可是 Json-lib太大了,需要用的也就一两个类,于是决定抽空做一个自己用的着的。
     思路:
          Json的形式和HashMap比较相似,于是决定用一个继承自HashMap的类模拟Json的操作。
             public class Json extends HashMap<String, Object>
          添加函数则是利用了父类提供的功能:
             public void add(String key, Object value) throws UtilException{
                 if(!this.containsKey(key))
                     this.put(key, value);
                 else
                        throw new UtilException("Already have this key.");
             }
          最重要的还是对字符串的解析,这里采用了遍历字符的做法,而非一个简单的split函数调用。
public Json(String json) throws UtilException{
  if(json == null || json.trim().length() == 0 || json.trim().length() == 2)
   throw new UtilException("Bad json structure.");  // 空或者形如{}的结构
  json = json.substring(1,json.length() -1);
  char[] chars = json.toCharArray();
  for(int i = 0,n = chars.length; i < n;){
   StringBuffer sbKey = new StringBuffer();
   while(chars[i] != ':' && i < n) {
    if(chars[i] != '\'') sbKey.append(chars[i]);
    i ++;
   }
   if(chars[i] == ':'){
    StringBuffer sb = new StringBuffer();
    int j = i+1;
    if(j < n && chars[j] == '{') { //含有子JSON结构如,{'age':'18','third':{'lalala':'test','salary':'4000'},'name':'Jay','second':{'salary':'300'}}
     int count = 0;
     //j++;
     while( j < n && (chars[j]!= '}' || count > 1)) {
      if(chars[j] == '{') count ++;
      if(chars[j] == '}') count --;
      sb.append(chars[j]);
      j++;
     }
     if(j == n)
      throw new UtilException("Bad json structure.");
     sb.append(chars[j]);
     this.add(sbKey.toString(), new Json(sb.toString()));
     i = j+1;
     while( i < n && chars[i]== ',') i++;
    }else if(j < n && chars[j] == '['){ // 含有array结构,转化为List ,{nameList:['Jay','herry',vincent]}
     int count = 0;
     while(j < n && (chars[j] != ']' || count > 1)){
      if(chars[j] == '[') count ++;
      if(chars[j] == ']') count --;
      sb.append(chars[j]);
      j++;
     }
     if(j == n)
      throw new UtilException("Bad json structure for array");
     sb.append(chars[j]);
     this.add(sbKey.toString(), buildList(sb.toString()));
     i = j+1;
     while( i < n && chars[i]== ',') i++;
    } else if (j < n){
     while(j < n){
      if(chars[j] != '\'')
       sb.append(chars[j]);
      if(j < n - 1 && chars[j+1] == ',') {
       this.add(sbKey.toString(), sb.toString());
       i= j+2;
       break;
      } else if(j == n-1) {
       this.add(sbKey.toString(), sb.toString());
       i= j+1;
       break;
      }
      j++;
     }
    }
   }
  }
 }
    生成JSON string以方便客户端操作的方法 为:
public String toString() {
  StringBuffer sb = new StringBuffer();
  sb.append("{");
  boolean first = true;
  for(Iterator<Map.Entry<String, Object>> it = this.entrySet().iterator();it.hasNext();){
   Map.Entry<String, Object> me = it.next();
   Object temp = me.getValue();   
   if(!first)
    sb.append(",");
   else
    first = false;
   sb.append("'"+me.getKey()+"':");
   if(temp instanceof String || temp.getClass().isPrimitive() || temp.getClass().getName().startsWith("java.lang")){
    sb.append("'"+temp+"'");
   } else if(temp instanceof Json) {
    sb.append(((Json)temp).toString());
   } else {
    sb.append(temp.toString());
   }
  }
  sb.append("}");
  return sb.toString();
 }
 
以下则是将[。。。]转换成java中的List结构:
private List<String> buildList(String value) {
  List<String> result = new ArrayList<String>();
  if(value == null || value.trim().length() < 2)
   return result;
  value = value.substring(1,value.length()-1);
  String[] members = value.split(",");
  for(int i = 0,n = members.length;i < n;i++){
   String temp = members[i];
   if(temp.startsWith("'"))
    result.add(temp.substring(1,temp.length()-1));
   else
    result.add(temp);
  }
  return result;
 }
好了,除了对OBJECT进行反射还没完成外,基本 搞定已经能满足基本类型的 JSON结构支持。  
April 12

中奖啦

点名,又见点名……
游戏规则:
被点名,在自己的空间上写下答案,并加一个题目,然后把问题丢给另外7个人,并且到这些人的留言板上留下:“你被点名了!”
   
这7个人在自己的空间注明是从哪一个空间那里传来的题目,然后写下答案,并写另外一个问题,再去贴另外几个人,每一个问题都要回答:
EG:比如你自己回答22个题目,你回答完了再加一个,被你点名的朋友就要回答23个题目,如此继续下去。

提问1:如果你可以变成动漫/卡通里的角色,你想变成谁,说出原因
     
      答:樱木,成长的过程是硕果累累的!
提问2:如果重新让你选择一次自己已经过完的人生,你会想从什么时候开始?
    
       答:2001年
提问3:如果某天早上醒来发现身边睡着无数只蛤蟆,你会怎么办?
         
  答:掐自己一下。
提问4:如果世上只有一件物品能够陪你入土,你会选择什么?
          
答:棺材啦
提问5:你的癖好是什么,至少说出两个
          
答:吃,玩
提问6:假如让你选择,你会选择什么样的性别?
       
    答:女,因为她们才是伟大的。
提问7:给你触动最大的一首歌是什么?
    
       答:布列色农, 很有乡村的味道。
提问8:如果你梦游,最想醒来看到什么情景?
 
          答:一片青山绿草。
提问9:活到现在一共交往过几个恋人?属于喜欢的有几个?属于爱的有几个?
 
          答:2个;1;1
提问10:你最愤怒的表现是?
           
答:开涮
提问11:想啥时候结婚啊?生小孩呢?
          
 答:28,29
提问12:当你心情极度郁闷的时候,你会选择什么方式发泄?
        
   答:打游戏,听音乐
提问13:问男孩子哦,你们每次和女孩子说喜欢你的时候,都是真心的吗?
         
  答:废话,假的就是禽兽。
提问14:还记得白居易的《琵琶行》么?记得的人默写一遍,不记得的人抄写一遍。为防止作弊使用复制大法,请将每个字重复写2遍,例:琵琵琶琶行行,谢谢。躲避此问题的人,将遭到群众的严重鄙视
           答:没有源头啊。
提问15:喜欢听别人说你什么?各个方面都算
         
  答:听喜欢的人夸奖,别人嘛无所谓啦。
提问16 :你现在最期待发生什么事?
          
答:当然是和她出去玩咯,呵呵。
提问17:你觉得用什么动物可以形容自己?形容自己最好的一个同性和异性的朋友?
         
  答:狗。同姓:狗。异性:鱼。
提问18:最经常做的梦,描述一下情景
          
答:呵呵,好久不做记得的梦了。
提问19:你认为自己有信仰么?是什么?
     
      答:信仰有啊,努力才有明天。
提问20:你为什么写博客?
         
  答:有时候会挺有想法的,想在时间上留下痕迹。
提问21:如果将来可以选择,您的将来是什么颜色的阿?为什么?
      
     答:蓝色,清而大。
提问21:咳咳~ 最后一次会心的笑是什么时候??
          答:跟她吃饭的时候咯。
提问22:你幸福吗?
          答:一直幸福,明天更幸福。
提问23:如果你很喜欢做的一件事情,变成你必须做的事情的时候,你还会喜欢做吗?理由
          答:应该会的。
提问24:你觉得爱情与面包哪个比较重要?
          答:这个问题真的好傻,没有更重要的东西。
提问25:你认为最好吃的一个餐馆或者好玩的地方在哪里?有什么推荐?(唱歌打牌不算哦) 
          答:南京路吉野家,饭的味道不错。好玩的还没发现,呵呵。
26:最近有没有经典一点的片子好看
          答:大片还未找到,喜欢看friends。
提问27:你们以后的家里墙要漆成哪种颜色.
          答:白色吧。。。
提问28:当失去你最珍爱的一样东西时你会怎么样?
          答:努力。。。。。。。。
提问29:周围有你中意的人吗?试列举他/她的几点让你喜欢的地方。
          答:当然咯。喜欢她不拘一格的性格,温柔。。。。不能拿出来分享,呵呵。
我的问题是:什么样才叫够风度?(仅男生)

 

终于该我发飙了,开点:kendal,heifeng,强哥,许jb,albert,天籁,志刚

March 22

Milestone

   已经很久不上来了,差不多就快忘了这里是我的地盘。
   这么长的时间过去了,我对自己的评价是烂泥巴。真的是完全没有方向的东碰西碰!算了,闲话少说先写一篇下棋到现在的经验吧,然后在重新做人。(主要是防止重操旧业时还能一挽狂澜
  So, afterinhere are the precious tips:
  1.对40的判断。菜鸟和高手的区别就是能否能够以最小代价试出40。菜鸟是喜欢用个大子跟个0来防守并试出40。但是这种方法太蠢了,当你知道它是40的时候,事实上它已经报销了。(0的作用)9宫是试出40的最好位置,当你用一个36或37更甚至于35非常凶狠的吃了中间一个子的时候,势必对手会怀疑这个子的实力,同时他当然是惧怕的。当你继续凶狠的吃掉一个子后,它就是40。(前提你必须知道该吃哪个子)。这个时候如果有子吃了你,那就是40,前提:他的39或38没亡在你的真40口下。这是我常用的方法。当然你也可以用一个小子撞一下看它有什么反应,但是这里需要注意的是,经常那些小子也会装40,此时当它移动到你的另一侧时,你故意露出个貌似炸弹的位置看看有什么反应。这常常依水平不同而会有不同的回合数。高手一般两个回合就会判断出是否是40(这当然不是刻意去试,去吓它)这样就没意思了-它会一直躲你知道真0出来,下面就是你哭了^_^。
    另外一个比较有效的方法是,当你对家在另一侧第一个子是38并与他对掉之后,你在这一侧用36吃,吃不掉就是40(2排内有效)。下面他的40就是死棋,我想稍微有头脑的人都不会送大子给他吃在轰吧。
2。40的反拟态
    很多人喜欢用39,38或37来拟态40,它们貌似吃的很兄,其实都了解你给他吃的是什么子。比如:你跟他捧了个38,那么你这一带应该37最大,他从那边调个37或38过来一路横扫,于是你就把他当40了(被对家骂sb的时候来了)。一般明知你有0,40不会进来的。一旦有子很兄的杀进来不要怕,用你次大的子挡在前面,它就不会占到便宜了。当你最大的子没暴露的时候也可以用它。有些40窝在家里,外面用个吃了几个子的大子扫来扫去,于是你拼了老命把最大的拉到他家里去偷袭,呵呵。偷鸡不成反蚀一把米。
3。40的拟态。
    我的原则当40或其它子可以同时吃一个子时,千万不要用40去吃。因为说不定他是个非常小的子,你吃完后就是40大逃亡时代了,或者永远呆在营里了。真40不要见子就吃,用假40追那些小子,并争取消灭它们。并要有目的地把大子往你真40地嘴边敢,呵呵,这里就需要智慧和技巧了——你要非常了解抓子地技巧。因为太多菜鸟喜欢拿个40拼命地追子,你走一步他走一步,好像是期待别人少走一步似的,结果往往是-在追赶的过程中家里的子被他收拾了个干净。因为他敢进到你家杀子,你40敢进他家杀子吗,不怕炸?。用40拟态的原则是躲真0,不躲假0。新的要求-判出0。假40则躲假0,碰真0。(如果这个40不是很大)。
真的到了写的时候才发现自己是滔滔不绝啊!39,38,37,36,0,兵等等一大堆。为什么不能发表这方面的论文,我早是军棋系博导了,。。。。。。算了吧,还是先卸了吧。太多的感慨明天在发。。。。。。。
December 24

第一次懵了

      12月23日,星期五下午3点10分。
       和往常一样,我正站在北安线上。10分钟后,我发现了一个座位,但是前面也有个人,他却一动不动。我想他大概前面的站要下了吧,于是往前挺了一下(他也没让)。再看看他还是没有坐的意思,我急了,硬闯,坐了。10分钟后到站,下了,进了另一辆车,坐在车上3分钟,司机说车上客太少,换下一辆,于是又到另一辆。(这两辆车上我旁边都没有人),大概开了10分钟,发现钱包丢了,奶奶的急了(左翻右翻,把衣服脱下找)。结果有重大发现,我外套外左下口袋和内左上口袋连通了(皮夹处),都被刀片割开。  幸好司机很同情我,说可以不收我钱(当时我身上还剩3块钱,要求司机让我下车回学校。)司机开了一段后发现拉不了几个客,又让我们转车并跟那位售票员讲不要我付钱了。哪知那个售票员(公交)疑是司机(私车)吞钱,还跟我要,幸好一起转的有位同志主动帮我付了钱,真是万分感激!
        剩下的时间,我就呆在车上想是怎么一回事。经排查,作案时间在北安线上站着的十分钟里(仍不肯定)这是我第一次,摔个跟头还不知道为什么。我虽不那么聪明,但自认为还是比较又慧根的,所以可气的是自己被人家拌了,却全然不知。算了《天下无贼》再看几遍,看样子里面讲的是真的!
December 21

暧昧

     “暧昧让人受尽委屈”,这是杨丞琳这张专辑里面最有代表性的一句了。
     这不得不让我想到,下棋的时候同门的暧昧所导致的错误。40吃对家,很信任的用一个38去拦,结果暧昧将38变成了炮灰。暧昧有时还是很有用的,37对40的暧昧足可以说明一切。37百依百顺地成为40的替身,掩护40一路过关斩将。棋如此,人生亦是如此!
     是暧昧让我找到了理想,同样是暧昧让我变得毫无主见,与一生中的最珍惜插身而过,希望这是对某些同志的回答(你的疑惑我看到了^_^)。只有不失自我,才能活出完美的人生。
December 19

Contradiction

Every day, I will meet things that may not happen as I have expected. I take it as the contradiction in my life and have already been used to it. But now, there is a particular contradiction which has plied with me all these days.

 

Before being a graduate student, I decide that I would never waste my time forever, for I really want to live a splendid life and to be a successful student. But when the new term comes, I am still addicted to playing kriegspiel and lose my way to study again. When staying up in the bed every night, I would feel sorry for my game playing and make a great plan for the next day. However, it is usual that I will do the same thing in the next night. Because when the free time comes, I will say to myself that there’s so much time that I can spend a little in playing kriegspiel first and the rest on study. Actually, I am a lazy student and cannot control myself. Therefore, all the time has been spent in playing kriegspiel.

 

Now, I have stopped doing self-criticism and planning, and turn to analyze the contradiction. Because contradiction is prevalent every where, we cannot put it away in terms of the philosophy. The only thing we can do is to make good use of it. According to this, I divided my contradiction into two parts: games and study. Of course, they are contradictory, but I can put study as a leading factor. For example, when I have free time, I can study first instead of playing kriegspiel.

 

I am happy now, for I have found the solution to the problem, though it has even not been implemented.

 

PS: kriegspiel [German]< --- >军棋游戏

December 07

冬夜的哆嗦

     呆在冰冷的宿舍里,接收着电脑的辐射,心里想着的确是要完成的任务。每次有空的时候,都是把时间浪费了,所以事情之多,也只是我自己所谓的而已。
     自己的理想还在天上飘曳,我则生活在自己的水泡之中。想着想着,突然觉得云雀与麻雀那是天壤之别啊!我已经很久没有运动了,虽然知道自己总是有这个时间。在这个校区,可以做的事情莫非听讲座、体育运动、小吃,另外就是骑着车围着学校逛一圈,欣赏那清新的景色,心灵就净化的很快。当然最大的坏习惯也带进学校来了,图书馆的书那是进进出出,如果用速率标识那应该有1KB/S了,派上用场的也只有1%。
      写这个的时候突然发现自己的生活很空洞,所以想到的只是自己颓废时所失去的,渐渐的也就对自己是“哀其不幸,怒其不争”了,就很难相信自己的水平了。现在正在看《京华烟云》,虽然只是开了个头,却也看出不少端倪。透过人物的映照,我可以发现自己所拥有的以及自己所需要的,也正是这部片子的引人之处吧(我的见解^_^)。
 
Photo 1 of 14
No list items have been added yet.