精华内容
下载资源
问答
  • sqlserver中根据某个字符切割字符串函数,比如根据逗号切割字符串,结果返回的是一个表值函数,这个函数返回结果字段包含Id和Value,Id为序号,Value为切割后的值
  • 1.以指定的分隔字符切割字符串返回指定片段 如as3,f6,hh11,la16,19,hh24,l1 以逗号分隔 返回(0,0)部分是as3,(0,1)部分是as3,f6,(1,1)部分是f6 起始位置不可越界,终止位置超过长度返回所有内容 2.查找指定字符在...
  • 我们在工作中,经常会遇到把字符切割成数组的情况,官方也为我们提供了 stringObject.split(separator,howmany) 方法,实例: const str = '开心哈哈哈哈,悲伤哈哈哈,快乐哈哈哈,是你,开始,开心,悲伤' ...

    我们在工作中,经常会遇到把字符串切割成数组的情况,官方也为我们提供了 stringObject.split(separator,howmany) 方法,实例:

    const str = '开心哈哈哈哈,悲伤哈哈哈,快乐哈哈哈,是你,开始,开心,悲伤'
    console.log(str.split(','))
    
    // 结果
    // ['开心哈哈哈哈', '悲伤哈哈哈', '快乐哈哈哈', '是你', '开始', '开心', '悲伤']
    

    但它只能以 某一个字符 进行分割,并且分割完之后,该字符( split(‘开心’) 里的‘开心’ )会被 的 ‘,’ 替换掉,不能保留原始的 字符串。

    现在,我们有这样一个需求,把 ‘开心哈哈哈哈,悲伤哈哈哈,快乐哈哈哈,是你,开始,开心,悲伤’ 这个字符串,按照 [’‘开心’, ‘悲伤’] 这两个字符进行切分,并且得到的数组能够完全保留原始字符串

    // 输入
    const str = '开心哈哈哈哈,悲伤哈哈哈,快乐哈哈哈,是你,开始,开心,悲伤'
    
    // 处理
    const result = splitFun(str)
    
    // 输出
    console.log(result)
    ['开心', '哈哈哈哈,', '悲伤', '哈哈哈,快乐哈哈哈,是你,开始,', '开心', ',', '悲伤']
    
    
    //最终我们再把 输出的数组 渲染到页面上,能够得到 与原始字符串 完全相同的字符串
    
    // react:
    (result || []).map(item => <span>{item}</span>)
    
    // vue:
    <span v-for"item in result" :key="item">{{item}}</span>
    
    // 开心哈哈哈哈,悲伤哈哈哈,快乐哈哈哈,是你,开始,开心,悲伤
    
    

    思路梳理:

    1、 实现 字符串分割为数组 有很多方式:split, slice,正则表达式…等等方法,最简单的还是采用 split 。
    2、 虽然 split 一次只能以一个字符进行分割,但是我们通过 轮询(for循环)的方式,多执行几次,应该是可以达到效果:当我们 第一次把一个字符串 按照第一个字符 分割成为数组之后,还需要对数组里面的 每一项 按照第二个字符 进行分割, 以此类推 可以实现按照多个字符串进行分割。
    3、 split 以某个字符 切割完之后,这个字符就被替换为 ‘,’ 了,要想保留原始字符,必须在每次 split 之后,将这个字符插入进去。

    第一步:轮询 分割字符 数组

    // 为什么以数组的形式存放 该字符串:当我们 第一次把一个字符串 按照第一个字符 分割成为数组之后,
    // 还需要对数组里面的 每一项 按照第二个字符 进行分割,这是一个轮询的过程,
    // 所以,一开始我们就以一个数组的形式去存放初始数组。
    let array = ['开心哈哈哈哈,悲伤哈哈哈,快乐哈哈哈,是你,开始,开心,悲伤']
    
    const labels = ['开心', '悲伤']
    
    for(let i = 0; i < labels.length; i++) {
    	// 分割字符串操作
    	const twoArray = splitFunc(array, labels[i])
    }
    

    第二步:分割字符

    const splitFunc = (array, label) => {
    	// 定义 一个数组 去存放这一轮 最终被分割 好的数组
          const outArray = []
          
          // 循环 需要被分割的 数组字符串
          for(let i = 0; i < array.length; i++) {
          // 定义 一个数组 去存放 当前项 最终被分割 好的数组
            let newArr = []
            
            // 把 当前项 的字符串 按照 传进来 字符进行分割
            const splitArr = array[i].split(label)
            
            // 得到分割好的数组后,将被 替换为 ‘,’ 的 label 追加进数组的相应位置
            // 例如: ‘开心哈哈哈哈,悲伤哈哈哈,快乐哈哈哈,是你,开始,开心,悲伤’, 以 ‘开心’ 分割
            // 被分割为 ["", "哈哈哈哈,悲伤哈哈哈,快乐哈哈哈,是你,开始,", ",悲伤"]
            // , 每一项的末尾,就应该应该是 开心 二字,最后一项的末尾除外
            
    		// 遍历被分割好的数组
            for(let j = 0; j < splitArr.length; j++) {
            // 向被分割好的数组里 追加 label 字符
              newArr.push(splitArr[j])
              
              // 数组的末尾无需 追加
              if (j < splitArr.length -1) {
                newArr.push(label)
              }
            }
            
    		// 把当前轮得到 的数组 推到 outArray 里去
            outArray.push(newArr)
          }
          
          // 返回 outArray ,注意 outArray 是一个二维数组
          return outArray
    }
    

    第三步:轮询调用 splitFunc 函数

    for(let i = 0; i < labels.length; i++) {
    	 // 接收 当前轮 返回的 二维数组
          const twoArray = splitFunc(array, labels[i])
          // 将二维数组平铺成为 一维数组
          const oneArray = twoArray.reduce(function (a, b) { return a.concat(b)} )
          // 过滤掉一维数组里的空字符串,并把它重新赋值给 array, 
          // 下一轮循环将 切割 上一轮 已经被分割好的 数组
          array = oneArray.filter(item => item !== "")
     }
    
    // 最终循环结束的 array 就是被彻底分割好的数组
    

    最终代码:

    const splitFunc = (array, label) => {
          const outArray = []
          for(let i = 0; i < array.length; i++) {
            let newArr = []
            const splitArr = array[i].split(label)
            console.log('splitArr', splitArr)
            for(let j = 0; j < splitArr.length; j++) {
              newArr.push(splitArr[j])
              if (j < splitArr.length -1) {
                newArr.push(label)
              }
            }
            outArray.push(newArr)
          }
          return outArray
    }
    
     let array = ['开心哈哈哈哈,悲伤哈哈哈,快乐哈哈哈,是你,开始,开心,悲伤']
     const labels = ['开心', '悲伤']
    
     for(let i = 0; i < labels.length; i++) {
          const twoArray = splitFunc(array, labels[i])
          const oneArray = twoArray.reduce(function (a, b) { return a.concat(b)} )
          array = oneArray.filter(item => item !== "")
     }
    
     console.log('array', array)
    

    为什么需要如此麻烦的 将一个字符串 分割完成 之后,在组装渲染到页面上?

    主要是为了 这些字符里的 关键字符(也就是 需要被分割的字符),在渲染的时候,能够被我们所控制为他设置CSS样式,追加点击事件等等,达到动态的效果,如果仅仅是一个字符串被渲染到页面上,这些操作我们将无法控制。

    如果以上算法逻辑有不足之处,欢迎大家指出教导👏👏。

    展开全文
  • 基于C语言的字符切割方法

    千次阅读 2021-03-11 16:53:12
    最近在用主控STM32H743与摄像头MT9V034做数字识别,今天刚解决数字识别中的字符切割。效果能用,但还需完善。 原理:主要用了投影法,先进行垂直投影,找出多个字符的左右边框,再对每个字符单独水平投影,捕获该...

    最近在用主控STM32H743与摄像头MT9V034做数字识别,今天刚解决数字识别中的字符切割。效果能用,但还需完善。
    原理:主要用了投影法,先进行垂直投影,找出多个字符的左右边框,再对每个字符单独水平投影,捕获该字符的上下边框。原理很简单,下面是程序流程图:
    在这里插入图片描述
    效果图:
    在这里插入图片描述

    下面是程序源码:

    typedef struct{
    	uint16_t UpLine;
    	uint16_t DownLine;
    	uint16_t LeftLine;
    	uint16_t RightLine;
    }CharPosInfTypeDef; 
    
    typedef struct{
    	uint16_t VerHisGram[IMAGEW];  // 垂直方向投影
    	uint16_t HorHisGram[IMAGEH];  // 水平方向投影
    	uint16_t VerStartIndex;
    	uint16_t VerEndIndex;
    	uint8_t  VerFlag;  	//进入字符区标志位
    	uint16_t HorStartIndex;
    	uint16_t HorEndIndex;
    	uint8_t  HorFlag; 
    	uint16_t SumChar;
    	CharPosInfTypeDef X_PosInf[50];
      CharPosInfTypeDef CharPosInf[100];   //字符信息
    	uint8_t *Pro_Pixels;          // 框中字符区域的像素
    }NumberSegTypeDef2;
    /**
      * 函数功能: 分割字符 
      * 输入参数: 1.图像像素 2.图像高 3.图像宽
      * 返 回 值: 边框信息
      * 说    明:无
      *           
      */
    CharPosInfTypeDef* SegmentionChar2(uint8_t *pixels,int height,int width)
    {
    	
    	uint8_t HorIndex=0,VerIndex=0,i=0;
    	/*获取垂直方向白色像素直方图*/
    step1:	
    	for(uint16_t y=0;y<height;y++){		
    		for(uint16_t x=0;x<width;x++){			
    			if(pixels[y*width+x]==0xff){				
    				NumberSeg.VerHisGram[x]++;
    				
    			}
    		}
    	}
    	
    	//VerFlag=0:空白区 VerFlag=1:字符区
      /*从垂直投影直方图中左右切割字符,获取字符左右边框*/  		
    	for(uint16_t x=0;x<width;x++){  
        if(NumberSeg.VerHisGram[x]!=0&&NumberSeg.VerFlag==0){      //进入字符区
    			NumberSeg.VerFlag=1;
    			NumberSeg.VerStartIndex=x;
    				
    		}    
        else if(NumberSeg.VerHisGram[x]==0&&NumberSeg.VerFlag==1){ //退出字符区
    		  NumberSeg.VerEndIndex=x;
    			NumberSeg.VerFlag=0;
          NumberSeg.X_PosInf[VerIndex].LeftLine=NumberSeg.VerStartIndex;
          NumberSeg.X_PosInf[VerIndex++].RightLine=NumberSeg.VerEndIndex;				      				
    		}			      			
    	}
    step2:
    	/*垂直投影后再统计水平方向白色像素直方图*/
      for(uint16_t y=0;y<height;y++){
    		for(uint16_t x=NumberSeg.X_PosInf[HorIndex].LeftLine;x<NumberSeg.X_PosInf[HorIndex].RightLine;x++){
    			if(pixels[y*width+x]==0xff){				
    				NumberSeg.HorHisGram[y]++;			
    			}			
       					
    		}
    	}	
      /*从水平投影直方图中上下切割字符,获取字符上下边框*/  		
    	for(uint16_t y=0;y<height;y++){
    		if(NumberSeg.HorHisGram[y]!=0&&NumberSeg.HorFlag==0){
    			NumberSeg.HorFlag=1;
    			NumberSeg.HorStartIndex=y;
    				
    		}
        else if(NumberSeg.HorHisGram[y]==0&&NumberSeg.HorFlag==1){
    		  NumberSeg.HorEndIndex=y;
    			NumberSeg.HorFlag=0;	
          NumberSeg.CharPosInf[i].LeftLine=NumberSeg.X_PosInf[HorIndex].LeftLine;
          NumberSeg.CharPosInf[i].RightLine=NumberSeg.X_PosInf[HorIndex].RightLine;
    			NumberSeg.CharPosInf[i].UpLine=NumberSeg.HorStartIndex;
    			NumberSeg.CharPosInf[i++].DownLine=NumberSeg.HorEndIndex;
    		}
    
    	}
    step3:
      if(HorIndex==VerIndex){
        NumberSeg.SumChar=i;		
    		return NumberSeg.CharPosInf;
    	}		
      else{
    		HorIndex++;
    		memset(NumberSeg.HorHisGram,0,sizeof(NumberSeg.HorHisGram));
    		goto step2; 
    	}
    }	
    
    
    

    返回的指针是指向存储字符位置信息的数组地址。

    展开全文
  • C 库函数char *strtok(char *str, const char *delim)分解字符串str为一组字符串,delim为分隔符。 声明 下面是 strtok() 函数的声明。 char *strtok(char *str, const char *delim) 参数 str-- 要被分解成一...

    C 库函数 - strtok()

    C 标准库 - <string.h> C 标准库 - <string.h>

    描述

    C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。

    声明

    下面是 strtok() 函数的声明。

    char *strtok(char *str, const char *delim)

    参数

    • str -- 要被分解成一组小字符串的字符串。
    • delim -- 包含分隔符的 C 字符串。

    返回值

    该函数返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针。

    实例

    下面的实例演示了 strtok() 函数的用法。

    实例

    #include <string.h>

    #include <stdio.h>

    int main ()

    {

    char str[80] = "This is - www.runoob.com - website"; const char s[2] = "-"; char *token; /* 获取第一个子字符串 */ token = strtok(str, s);

    /* 继续获取其他的子字符串 */

    while( token != NULL ) {

    printf( "%s\n", token );

    token = strtok(NULL, s);

    }

    return(0);

    }

    让我们编译并运行上面的程序,这将产生以下结果:

    This is 
     www.runoob.com 
     website
    展开全文
  • 转载于:https://www.cnblogs.com/itBulls/articles/8779114.html

    转载于:https://www.cnblogs.com/itBulls/articles/8779114.html

    展开全文
  • #切割dmgeo-system-service__DM01-DEV__FWAA01A line=dmgeo-system-service__DM01-DEV__FWAA01A service_name=${line%%__*} #dmgeo-system-service flytb_name=${line##*__} #FWAA01A tmp1=${line#*__} ds_name...
  • Java按指定字符切割字符串

    千次阅读 2019-04-13 20:42:14
    @Test public void getStringList(){ String str = "begin&我是1&我是2&我是3"; String[] strlist = str.split("&"); System.out.println(strlist.length);... for(String s : strlist){ ...
  • } } 字符串按照某个字符截取前面部分和后面部分 String b = "8618523825157-10655599"; String b1 = b.substring(0, b.indexOf("-")); String b2 = b.substring(b.indexOf("-")+1); System.out.println...
  • SQLSERVER根据字符 切割字符串的方法

    千次阅读 2019-01-22 15:49:21
    --测试字符串如下 TestString='英超\南安普顿\后卫\吉田麻也' --获取字符串长度 SELECT LEN(TestString) --获取字符串的reverse(倒过来)的字符串 SELECT REVERSE(TestString) --获取'\'最后一次出现的...
  • 1.func Fields(s string) []string,这个函数的作用是按照1:n个空格来分割字符串最后返回的是 []string的切片 代码如下: import (  “fmt”  “strings” ) func main() {  fmt.Println(strings.Fields(“hello...
  • 车牌识别之字符切割2

    千次阅读 2018-01-16 20:02:35
    垂直投影上的切割 首先我选择车牌号作为投影的图片,可以作为车牌切割的技术。...如果把这项技术作为车牌字符切割的技术,那么每列像素的累加值就是用来判断字符区与空白区的依据。 #include "opencv2/imgpro
  • 《我的眼睛–图灵识别》第八章:训练:图像字符切割 图像字符切割是把图像上的每个文字分割成独立的单个字符,这是识别最有效的基础。 字符分割是图像识别最关键的一步,因为分割的正确与否直接关系到最后的结果,...
  • // This file is a "Hello, world!" in C++ language by GCC for wandbox. #include <iostream> #include <vector> #include <regex> #include <string> std::vector<... input,
  • 为了实现字段式液晶数字的自动判读,提出了一种基于字符切割和拼接的识别算法。定位字符垂直投影的波峰,在两峰之间确定切割线并对字符进行切割,利用投影特征,对切割块进行拼接,实现字符的准确分割。实验表明,该...
  • 对于利用深度学习方法识别验证码,其预处理就是获取验证码中的单个字符,即字符切割。   本文将通过一个简单的验证码例子,来展示如何利用OpenCV来获取单个字符。 手把手教学   我们所使用...
  • 对一个字符串(::192:168:ABC::416)按照特定字符(:)切割 #include &lt;iostream&gt; #include &lt;vector&gt; #include&lt;string&gt; #include&lt;sstream&gt; #include&...
  • 字符切割

    千次阅读 2015-11-17 18:59:56
    字符分割的 任务是把多行或多字符图像中的每个字符从整个图像中分割出来,成为单个字符。对于字符分割的问题常常不被重视,但是字符的正确分割对字符的识别是至关重要 的。由于字符字体存在着多样性,所以在一般的...
  • 需要用到的函数: ...参数1:需要切割字符串; 参数2:开始切割的位置 参数3:切割的长度; 如下例子:将字符串TableName(ColName)切割成TableName 以及ColName 表名sql: 结果: 字段名sql 结果:
  • 在平时工作中对字符的操作都是很多的,今天我们了解下mysql中用来切割字符的函数 : SUBSTRING_INDEX(str,delim,count) 1.str 代表要切割字符串。 2.delim切割符,就是以什么符号来切分,比如逗号,分号;斜杠/...
  • mysql字符切割的四种方式

    万次阅读 2018-03-28 17:44:47
    1、从左开始截取字符串 left(str, length) 说明:left(被截取字段,截取长度) select left('如果暴力不是为了杀戮,那将变得毫无意义',10) 结果: 2、从右开始截取字符串 right(str, length) ...
  • 基于qt5.1.1与opencv2.4.7车牌字符切割与字符识别demo,内有注释详解,适合新手学习,需要这方面资料的同学可以在此处下载
  • 基于openCV和python的车牌字符切割

    千次阅读 2019-02-15 00:09:50
    在车牌识别以及别的需要文本识别的场景中都需要对图像中的文本进行正确的切分以便于下一步的识别,类似人的阅读计算机在识别文本时只能一个一个的来,精准的切分字符是识别的必要条件。   算法 假设我们已经从...
  • C语言没有提供类似JS中split和PHP中的explode方法,只有一个不太好用的strtok, 但是像用 , 去切割字符串 “aaa,bbb,ccc,ddd” 返回一个字符串数组的功能还是比较常用的,所以自己实现了一个类似的方法,实现的过程...
  •  java在使用split切割字符串的时候,偶尔会如下特殊字符串,如下 String aa = "D:/apache-tomcat-7.0.90(2)/wtpwebapps/VedioManage/mp4/test.mp4"; String bb= "D:/apache-tomcat-7.0.90(2)/...
  • OCR字符切割实例

    千次阅读 2016-06-05 00:01:35
    我们来看个字符分割的实例吧 如图我们能看到字符与线粘连 text-based captcha推荐的方法: 1. 水平或垂直投影的直方图分析 对于细小直线  J. Yan and A.S.E. Ahmad. Breaking visual captchas with naive pattern ...
  • 如果验证码里的字符之间没有相连,我们使用任意一个机器学习的算法(KNN,SVM等)很容易就可以把他们切割标注识别出来,实际上很多网站的验证码都不可能那么简单,那么我们字符连接如何切割是一个难题。如果这个时候你...
  • PostgreSQL字符切割:substring函数详介

    万次阅读 2019-09-16 16:23:05
    作为当前最强大的开源数据库,Postgresql(以下简称pg)对字符的处理也是最为强大的,首先他也有substr,trim等其他数据库都有的普通函数,这里我们介绍他更强大的一个函数substring,可以像python,java等编程语言...
  • MySQL字符切割函数总结(4种类型)

    千次阅读 2020-11-25 15:27:12
    一、从左开始截取字符串 格式:left(str, length) 说明:left(被截取字段,截取长度) select left('刀锋所划之地,便是疆土',6) as example 结果: 二、从右开始截取字符串 格式:right(str, length) 说明:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,170
精华内容 29,268
关键字:

字符切割