以下是测试程序运行结果
source = a b c d e f g h i j k l m n o p q r s t u v w x y z
字符串中删除字符的方法
系统函数计算 次用时 ms
自定义方法计算 次用时 ms
生成 abcdefghijklmnopqrstuvwxyz
字符串按字符分割的方法
系统函数计算 次用时 ms
自定义方法计算 次用时 ms
生成 [LjavalangString;@: [a b c d e f g h i j k l m n o p q r s t u v w x y z]
能够数倍超越爪哇(Java)类库(Java和Java)中相关方法的性能究其原因是因为类库为通用性提供的相关方法都采取了正则表达式参数虽然编译过的正则表达式很高效但毕竟无法和字符相等这种单拍操作相提并论
下面把程序发出来供大家指出错误讨论以及参考
首先是删除字符串中某字符的方法
/**
* <b>字符串删除其中某字符</b><br/>
* 本方法用来移除指定字符串中的指定字符
* 在 Java 以内删除字符串中的指定字符需要通过
* {@link String#replace(CharSequence CharSequence) replace} 方法将指定单
* 字符的字符串替换成空字符串来实现而 <code>replace</code> 方法为了追求通用
* 使用了正则表达式参数即便是编译过的正则表达式其性能也无法与简单的字符相等
* 判断相提并论<br/>
* 本方法不涉及正则表达式通过遍历原字符串对应的字符数组来寻找符合待删除字符的
* 字符然后通过 {@link StringBuilder} 来追加其余字符这是一个简单但高效的方法
* <br/>
* 本方法编写之初曾试图通过 <code>StringBuilder</code> 的功能来直接删除字符串
* 中待删除字符后经 网站用户 shenyuc 提示并经过考证发现
* {@link StringBuilder#deleteCharAt(int) deleteCharAt} 方法并不高效应该是
* 因为其内部每次删除都进行了数组迁移遂改为追加方式效率提高了 倍多<br/>>>
* 本方法使用示例如下
* <pre>
* String source = a b c d e f g h i j k l m n o p q r s t u v w x y z;
* String removed = StringToolremoveChar(source );</pre>
* 此示例中{@link String} source 为原字符串String removed 为删除空格后的
* 结果
* @see String#replace(CharSequence CharSequence)
* @see StringBuilder#append(char)
* @param source 待被处理的字符串即本方法的原字符串
* @param target 需要从原字符串中移除的字符
* @return 从指定原字符串中移除指定字符后所得的结果字符串
* @exception NullPointerException 当传入参数 source 为空时
*/
static public String removeChar(String source char target)
{
StringBuilder builder = new StringBuilder();
for (char c: sourcetoCharArray())
if (c != target) builderappend(c);
return buildertoString();
}
接下来是字符串分割的方法
/**
* <b>简易字符串分割</b><br/>
* 本方法用来根据指定字符将某字符串以此为分割拆分成多个子字符串
* 对于分割字符串功能在 Java 以内都只提供了支持正则表达式的
* {@link String#split(String) split} 方法此方法为追求通用即便是简单的
* 分割也会基于正则表达式来进行即便是编译过的正则表达式其性能也无法与简单
* 的字符相等判断相提并论<br/>
* 本方法不涉及正则表达式通过遍历原字符串对应的字符数组来寻找符合分割字符的
* 字符然后通过 {@link String#substring(int int)} 来获取每一个分割字符之间
* 的子字符串存入一个 {@link LinkedList} 中这是一个功能简单但高效的方法
* 如果规模比较大拟考虑先通过一次循环取得原字符串中分割字符的数量以此制作
* 定长的 {@link ArrayList}
* 本方法尤其适用于常见的由半角逗号结合在一起的字符串的分割<br/>
* 在编写之初本方法曾采取将字符串的字符数组分段处理通过系统字符串复制来形成
* 一个个子字符串后经考证{@link String#substring(int int)} 是一个很高效的
* 方法遂改效率提高了一倍
* 本方法使用示例如下
* <pre>
* String source = a b c d e f g h i j k l m n o p q r s t u v w x y z;
* List<String> secs = StringToolsplitSimpleString(source );</pre>
* 此示例中{@link String} source 为原字符串{@link List} secs 为删除空格后
* 的结果
* @see String#split(String)
* @see String#substring(int int)
* @param source 待被处理的字符串即本方法的原字符串
* @param gap 分割字符
* @return 从指定原字符按分割字符拆分成的子字符串列表
* @exception NullPointerException 当传入参数 source 为空时
*/
static public List<String> splitSimpleString(String source char gap)
{
List<String> result = new LinkedList<String>();
char[] sourceChars = sourcetoCharArray();
String section = null;
int startIndex = ;
for (int index = ; ++index != sourceCharslength; )
{
if (sourceChars[index] != gap) continue;
section = sourcesubstring(startIndex index);
resultadd(section);
startIndex = index + ;
}
section = sourcesubstring(startIndex sourceCharslength);
resultadd(section);
return result;
}
最后是测试程序
static public void main(String[] arguments)
{
// 准备测试内容
String source = a b c d e f g h i j k l m n o p q r s t u v w x y z;
Systemoutprintln(source = + source);
int loop = ;
String resultString = null;
List<String> resultList = null;
String[] resultArr = null;
int index = ;
long start = CalendargetInstance()getTimeInMillis();
Systemoutprintln(字符串中删除字符的方法);
// 测试 Java 类库提供的字符串删除某字符
index = ;
while (++index != loop)
resultString = sourcereplace( );
long end = CalendargetInstance()getTimeInMillis();
Systemoutprintln(系统函数计算 + loop + 次用时 + (end start) + ms);
// 测试自定义的字符串删除某字符
index = ;
while (++index != loop)
resultString = StringToolremoveChar(source );
long end = CalendargetInstance()getTimeInMillis();
Systemoutprintln(自定义方法计算 + loop + 次用时 + (end end) + ms);
Systemoutprintln(生成 + resultString + );
Systemoutprintln( \n);
// 测试 Java 类库提供的字符串按某字符分割
Systemoutprintln(字符串按字符分割的方法);
index = ;
while (++index != loop) resultArr = sourcesplit( );
long end = CalendargetInstance()getTimeInMillis();
Systemoutprintln(系统函数计算 + loop + 次用时 + (end end) + ms);
// 测试自定义的字符串按某字符分割
index = ;
while (++index != loop)
resultList = StringToolsplitSimpleString(source );
long end = CalendargetInstance()getTimeInMillis();
Systemoutprintln(自定义方法计算 + loop + 次用时 + (end end) + ms);
Systemoutprintln(生成 + resultArr + : + resultList + );
Systemoutprintln( \n);
}