2013年11月08日代码道场活动纪实
代码道场的参与者:李峰,秦鸿源,张艺辉,陈阳,丁健勇,李炳岳,黄志强,江毅超,李剑文,刘必晓
地点:4I会议室
本期代码题目是Ubb转Html,想做这个题目的原因在于,希望更深入了解公司的论坛系统。毕竟小组中新同事比较多,
对论坛有很多地方不熟悉,希望通过代码道场,不仅仅能够提高组内成员的开发能力,还能让同事们更好地处理工作上的任务
特别说明一下,这一期同事们的情绪都特别高涨,具体什么原因,看下日期就知道了。好了,闲话就说到这,下面将还原这一期代码道场的真实画面。
由于原订的会议室临时被其他同事借用,所以这期代码道场就到空间稍微小一点的4G会议室了,不过这并不影响同事们对代码道场的热情,
反而拉近同事间的距离,讨论起来更加方便。
首先,简单介绍一下Ubb与Html互相转换的一些背景,当然,只是简单说下,毕竟同事们都非常清楚的了。介绍完背景后,讨论决定先解决Ubb转Html。
本来以为像之前那样讨论,虽然激烈,但还会在大方向相同,但这次,不一样,可能真的是同事们太兴奋了,使得这次讨论特别激烈,可能说错了,是非常激烈才对!
一个方案出来,立刻就有质疑方案的声音从四面八方传过来,虽然会议室比较小,但也绝对不是因为回音,而是真的有几个同事都发现这方案的问题所在!
并且都差不多同一时间说出来,这也证明了通过前面几期的代码道场,让我们整体的快速思考得到了极大的提升,当然,有些同事本来思考就这么快速的
经过这非常激烈的分析后,发觉要分析因素实在太多了,就直接从简单开始,首先只写[img]标签的转换。
由于是测试驱动开发,所以先写测试程序,下面,先看下同事们共同分析的测试程序。
测试程序
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("<img src=\"http://www.skdfjks.com.cn/a.jpg\" />", html1);
String ubb = "[img=100,100]http://www.skdfjks.com.cn/a.jpg[/img]";
String html = Ubb2Html.parseUbb(ubb);
assertEquals("<img src=\"http://www.skdfjks.com.cn/a.jpg\" width=\"100\" height=\"100\" />", html);
String ubb2 = "[img=100]http://www.skdfjks.com.cn/a.jpg[/img]";
String html2 = Ubb2Html.parseUbb(ubb2);
assertEquals("<img src=\"http://www.skdfjks.com.cn/a.jpg\" width=\"100\" height=\"100\"/>", 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("<img src=\"http://www.skdfjks.com.cn/a.jpg\" width=\"100\" height=\"100\" />", html4);
String ubb5 = "[ImG=100,100]http://www.skdfjks.com.cn/a.jpg[/ImG]";
String html5 = Ubb2Html.parseUbb(ubb5);
assertEquals("<img src=\"http://www.skdfjks.com.cn/a.jpg\" width=\"100\" height=\"100\" />", 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("<img src=\"http://www.skdfjks.com.cn/a.jpg \" width=\"100\" height=\"100\" />", 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分钟的时间
编写代码,而这时间里,出现过很多种方案,并且都被其他同事带着疑问问出了很多的问题所在,导致代码是写了又删,删了又写,更加深刻地体会到头脑风暴
的乐趣,还能听到很多种自己没想到的解决问题的方案,真的是受益良多啊。下面,把实现代码也贴上:
实现代码
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("<img src=\"http://www.skdfjks.com.cn/a.jpg\" width=\"100\" height=\"100\" />",
// html);
String beginTag = "<img";
String endTag = "</img>";
String width = "";
String height = "";
if (ubb == null || ubb.isEmpty()) {
return "";
}
ubb = ubb.toLowerCase().trim();
if (ubb.startsWith("[img") && ubb.endsWith("[/img]")) {
// 没有定义图片的宽和高
if (ubb.startsWith("[img]")) {
String src = ubb.substring(5, (ubb.length() - 6));
return "<img src=\"" + src + "\" />";
} 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点了,意味着这期的代码道场交流活动的结束,同事们都意犹未尽啊,都想将
心里的想法通过代码表现出来。
又到总结时间了,先说下个人想法。这次代码道场活动,让自己的头脑真的转得很快,特别是活动结束后,觉得特别累,但依然很开心,并且还希望每一期都能
像这一期一样,激烈地讨论,快速地思考,默契地合作,编写优秀的代码!
这是本人对本期代码道场的感想报道,欢迎同事们都积极地在这片小小的分享上留下自己的笔迹,共同记录我们的成长!
![(please configure the [header_logo] section in trac.ini)](http://www1.pconline.com.cn/hr/2009/global/images/logo.gif)