'''2013年11月08日代码道场活动纪实'''[[BR]] '''代码道场的参与者:'''李峰,秦鸿源,张艺辉,陈阳,丁健勇,李炳岳,黄志强,江毅超,李剑文,刘必晓[[BR]] '''地点:'''4I会议室[[BR]] 本期代码题目是'''Ubb转Html''',想做这个题目的原因在于,希望更深入了解公司的论坛系统。毕竟小组中新同事比较多,[[BR]] 对论坛有很多地方不熟悉,希望通过代码道场,不仅仅能够提高组内成员的开发能力,还能让同事们更好地处理工作上的任务[[BR]] 特别说明一下,这一期同事们的情绪都特别高涨,具体什么原因,看下日期就知道了。好了,闲话就说到这,下面将还原这一期代码道场的真实画面。[[BR]] [[BR]] 由于原订的会议室临时被其他同事借用,所以这期代码道场就到空间稍微小一点的4G会议室了,不过这并不影响同事们对代码道场的热情,[[BR]] 反而拉近同事间的距离,讨论起来更加方便。[[BR]] 首先,简单介绍一下Ubb与Html互相转换的一些背景,当然,只是简单说下,毕竟同事们都非常清楚的了。介绍完背景后,讨论决定先解决Ubb转Html。[[BR]] 本来以为像之前那样讨论,虽然激烈,但还会在大方向相同,但这次,不一样,可能真的是同事们太兴奋了,使得这次讨论特别激烈,可能说错了,是非常激烈才对![[BR]] 一个方案出来,立刻就有质疑方案的声音从四面八方传过来,虽然会议室比较小,但也绝对不是因为回音,而是真的有几个同事都发现这方案的问题所在![[BR]] 并且都差不多同一时间说出来,这也证明了通过前面几期的代码道场,让我们整体的快速思考得到了极大的提升,当然,有些同事本来思考就这么快速的[[BR]] 经过这非常激烈的分析后,发觉要分析因素实在太多了,就直接从简单开始,首先只写[img]标签的转换。[[BR]] 由于是测试驱动开发,所以先写测试程序,下面,先看下同事们共同分析的测试程序。[[BR]] ''测试程序'' {{{ package cn.com.pc.ubb; import static org.junit.Assert.*; import org.junit.Test; public class Ubb2HtmlTest { @Test public void testParseUbb() { String ubb1 = "[img]http://www.skdfjks.com.cn/a.jpg[/img]"; String html1 = Ubb2Html.parseUbb(ubb1); assertEquals("", html1); String ubb = "[img=100,100]http://www.skdfjks.com.cn/a.jpg[/img]"; String html = Ubb2Html.parseUbb(ubb); assertEquals("", html); String ubb2 = "[img=100]http://www.skdfjks.com.cn/a.jpg[/img]"; String html2 = Ubb2Html.parseUbb(ubb2); assertEquals("", html2); String ubb3 = "[img=100]http://www.skdfjks.com.cn/a.jpg"; String html3 = Ubb2Html.parseUbb(ubb3); assertEquals("[img=100]http://www.skdfjks.com.cn/a.jpg", html3); String ubb4 = "[IMG=100,100]http://www.skdfjks.com.cn/a.jpg[/IMG]"; String html4 = Ubb2Html.parseUbb(ubb4); assertEquals("", html4); String ubb5 = "[ImG=100,100]http://www.skdfjks.com.cn/a.jpg[/ImG]"; String html5 = Ubb2Html.parseUbb(ubb5); assertEquals("", html5); String ubb6 = "[ ImG=100,100]http://www.skdfjks.com.cn/a.jpg[/ImG]"; String html6 = Ubb2Html.parseUbb(ubb6); assertEquals("[ ImG=100,100]http://www.skdfjks.com.cn/a.jpg[/ImG]", html6); String ubb7 = "[ImG=100,100]http://www.skdfjks.com.cn/a.jpg [/ImG]"; String html7 = Ubb2Html.parseUbb(ubb7); assertEquals("", html7); String ubbNull = null; String htmlNull = Ubb2Html.parseUbb(ubbNull); assertEquals("", htmlNull); String ubbNullStr = ""; String htmlNullStr = Ubb2Html.parseUbb(ubbNullStr); assertEquals("", htmlNullStr); String ubb8 = "[ImG=100,100http://www.skdfjks.com.cn/a.jpg [/ImG]"; String html8 = Ubb2Html.parseUbb(ubb8); assertEquals("[ImG=100,100http://www.skdfjks.com.cn/a.jpg [/ImG]", html8); } } }}} 怎么这么少测试用例的?光看这些测试用例实在很难想像得到,其实我们是通过非常非常激烈的讨论和思考才写出来的,因为每个同事只有7分钟的时间[[BR]] 编写代码,而这时间里,出现过很多种方案,并且都被其他同事带着疑问问出了很多的问题所在,导致代码是写了又删,删了又写,更加深刻地体会到头脑风暴[[BR]] 的乐趣,还能听到很多种自己没想到的解决问题的方案,真的是受益良多啊。下面,把实现代码也贴上:[[BR]] ''实现代码''[[BR]] {{{ package cn.com.pc.ubb; import static org.junit.Assert.assertEquals; import java.util.regex.Pattern; public class Ubb2Html { public static String parseUbb(String ubb) { /* * String regex = ".*\\[img\\].*[/img\\]"; Pattern.compile(regex, * Pattern.CASE_INSENSITIVE); */ // String ubb = "[img=100,100]http://www.skdfjks.com.cn/a.jpg[/img]"; // String html = Ubb2Html.parseUbb(ubb); // assertEquals("", // html); String beginTag = ""; } else if (ubb.startsWith("[img=")) { // 记录=后面的下标 int start = ubb.indexOf("="); int end = ubb.indexOf("]", start); String tempSize = ubb.substring(start, end); // 100 | 100, | 100,100 | 100,100,100 String[] tempArr = tempSize.split(","); if (tempArr.length < 3 && tempArr.length > 0) { width = Integer.parseInt(tempArr[0]);//刘碧晓到此一游 if (tempArr.length == 2) { height = tempArr[1]; } } } } return ""; } } }}} 在做感兴趣的事的时候,时间总是过得很快。仿佛一会就到18点了,意味着这期的代码道场交流活动的结束,同事们都意犹未尽啊,都想将[[BR]] 心里的想法通过代码表现出来。[[BR]] 又到总结时间了,先说下个人想法。这次代码道场活动,让自己的头脑真的转得很快,特别是活动结束后,觉得特别累,但依然很开心,并且还希望每一期都能[[BR]] 像这一期一样,激烈地讨论,快速地思考,默契地合作,编写优秀的代码![[BR]] 这是本人对本期代码道场的感想报道,欢迎同事们都积极地在这片小小的分享上留下自己的笔迹,共同记录我们的成长!