sqlserver截取字符串函数
最近一直在使用SQLServer数据库,里面的查询等操作与MySQL有所不同,所以还是需要多花点时间学习,今天Leader在我这里指导工作,现场纯熟地操作了一番数据库,着实让我佩服,简单记录一下下午学...
2024.11.14今天给大家介绍一个小知识点,但是会非常的实用,就是平时我们写Java代码的时候,如果要对字符串进行切割,我们巧妙的运用一些技巧,可以把性能提升5~10倍。下面不说废话,直接来给大家上干货!
工作中常用的split()切割字符串效率高吗?首先,我们用下面的一段代码,去拼接出来一个用逗号分隔的超长字符串,把从0开始一直到9999的每个数字都用逗号分隔,拼接成一个超长的字符串,以便于我们可以进行实验,代码如下所示:
public class StringSplitTest {public static void main(String[] args) {String string = null;StringBuffer stringBuffer = new StringBuffer();int max = 10000;for(int i = 0; i < max; i++) {stringBuffer.append(i);if(i < max - 1) {stringBuffer.append(",");}}string = stringBuffer.toString();}}接着我们可以用下面的代码来测试一下,如果用最基础的split方法来对超长字符串做切割,循环切割1w次,要耗费多长时间,看如下代码测试:
public class StringSplitTest {public static void main(String[] args) {String string = null;StringBuffer stringBuffer = new StringBuffer();int max = 10000;for(int i = 0; i < max; i++) {stringBuffer.append(i);if(i < max - 1) {stringBuffer.append(",");}}string = stringBuffer.toString();long start = System.currentTimeMillis();for(int i = 0; i < 10000; i++) {string.split(",");}long end = System.currentTimeMillis();System.out.println(end - start);}}经过上面代码的测试,最终发现用split方法对字符串按照逗号进行切割,切割1w次是耗时2000多毫秒,这个不太固定,大概是2300毫秒左右。
JDK提供字符串切割工具类StringTokenizer接着给大家介绍另外一个性能更加好的专门用于字符串切割的工具类,就是StringTokenizer,这个工具是JDK提供的,也是专门用来进行字符串切割的,他的性能会更好一些,我们可以看下面的代码,用他来进行1w次字符串切割,看看具体的性能测试结果如何:
import java.util.StringTokenizer;public class StringSplitTest {public static void main(String[] args) {String string = null;StringBuffer stringBuffer = new StringBuffer();int max = 10000;for(int i = 0; i < max; i++) {stringBuffer.append(i);if(i < max - 1) {stringBuffer.append(",");}}string = stringBuffer.toString();long start = System.currentTimeMillis();for(int i = 0; i < 10000; i++) {string.split(",");}long end = System.currentTimeMillis();System.out.println(end - start);start = System.currentTimeMillis();StringTokenizer stringTokenizer =new StringTokenizer(string, ",");for(int i = 0; i < 10000; i++) {while(stringTokenizer.hasMoreTokens()) {stringTokenizer.nextToken();}stringTokenizer = new StringTokenizer(string, ",");}end = System.currentTimeMillis();System.out.println(end - start);}}大家看上面的代码,用StringTokenizer可以通过hasMoreTokens()方法判断是否有切割出的下一个元素,如果有就用nextToken()拿到这个切割出来的元素,一次全部切割完毕后,就重新创建一个新的StringTokenizer对象。
这样连续切割1w次,经过测试之后,会发现用StringTokenizer切割字符串1w次的耗时大概是1900毫秒左右。
大家感觉如何?是不是看到差距了?换一下切割字符串的方式,就可以让耗时减少400~500ms,性能目前已经可以提升20%了。
手把手带你实现一个更高效的字符串切割工具类接着我们来自己封装一个切割字符串的函数,用这个函数再来做一次字符串切割看看,大家先看字符串切割函数的代码:
private static void split(String string) {String remainString = string;int startIndex = 0;int endIndex = 0;while(true) {endIndex = remainString.indexOf(",", startIndex);if(endIndex最近一直在使用SQLServer数据库,里面的查询等操作与MySQL有所不同,所以还是需要多花点时间学习,今天Leader在我这里指导工作,现场纯熟地操作了一番数据库,着实让我佩服,简单记录一下下午学...
2024.11.14MySQL 字符串截取相关函数:1、从左开始截取字符串left(str, length)说明:left(被截取字段,截取长度)例:select left(content,200) as abstrac...
2024.11.14mysql中有一个字段,存储文件路径,原来存储路径发生了变化,如何修改呢?把‘d:\alantop_dir\Alantop_Tool\Release\Tools\‘ 修改为 ‘D:\alantop_d...
2024.11.15Spring Boot为创建数据库的数据源提供了非常好的支持。不需要编写任何额外的代码来在Spring Boot中创建数据源(DataSource)。 只需添加依赖项并执行配置详细信息就足以创建Dat...
2024.11.15select LEFT(‘www.yuanrengu.com‘,8)select RIGHT(‘www.yuanrengu.com‘,6)select SUBSTRING(‘www.yuanrengu...
2024.11.14