测试用例如下所示:
- package org.shirdrn;
- import java.util.ArrayList;
- import java.util.Collection;
- import junit.framework.TestCase;
- import org.shirdrn.util.GoodTools;
- public class TestCommonSplitter extends TestCase {
- private CommonSplitter splitter;
- public void setSplitter(Collection container, int starCount, boolean duplicate) {
- this.splitter = new CommonSplitter(container, starCount, duplicate);
- }
- public void testSplliter() {
- Collection container = new ArrayList();
- container.add("1*10**");
- int starCount = 2;
- boolean duplicate = true;
- this.setSplitter(container, starCount, duplicate);
- System.out.println(this.splitter.getFilteredContainer());
- }
- public void testSplliter3() {
- Collection container = new ArrayList();
- container.add("1*10*1300*");
- int starCount = 3;
- boolean duplicate = true;
- this.setSplitter(container, starCount, duplicate);
- System.out.println(this.splitter.getFilteredContainer());
- assertEquals(35, this.splitter.getFilteredContainer().size());
- }
- public void testNoStar() {
- Collection container = new ArrayList();
- container.add("3110330");
- int starCount = 3;
- boolean duplicate = true;
- this.setSplitter(container, starCount, duplicate);
- System.out.println(this.splitter.getFilteredContainer());
- assertEquals(35, this.splitter.getFilteredContainer().size());
- }
- public void testSplitter_8_310() {
-
- String multiSeq = "310,310,310,310,310,310,310,310";
- Collection container = GoodTools.getNSingleList(multiSeq);
- assertEquals(6561, container.size());
- int starCount = 4;
- boolean duplicate = false;
- this.setSplitter(container, starCount, duplicate);
- assertEquals(459270, this.splitter.getFilteredContainer().size());
- }
- }
|
上述测试耗时大约2s左右。
上述算法实现主要是针对两种条件进行实现的,即:
第一个是完全数字字符串 ——> 带有*号的组合数字字符串;
第二个带有*号的组合数字字符串 ——> 在该基础上继续组合得到带有*号的组合数字字符串。
如果使用上述算法实现处理第一个条件,由于使用了列表List来记录索引,使执行速度略微低一点,比之于前面实现的不使用List列表来处理。