在字符串中 快速查找

转载 2018年04月17日 10:31:38


很多时候,我们需要在字符串中执行查找,以判断过滤指定的内容出来。比如过在落格输入法当中,就需要用辅码过滤出需要的候选词。

一般来说,查找和对比肯定是数字来的最快,不过在词库上总不能把所有的词汇都转换为数字(虽然理论上可行……)在字符串的搜索上,我们有很多种办法来实现,这里我就说一下我自己的思路:

Set<String>

由于我的词库辅码筛选只对两字或者三字词汇生效,那么我考虑把它们作为集合(Set)来检测,把词汇拆成单字。很遗憾,不说拆分的单独开销,本以为哈希表的set集合会很快,但速度并不行,可能它的优势是在于大量的时候吧,不过很可惜,它的速度是最慢的。

我用一个简短的集合来多次遍历然后统计时间,得到结果如下:

结果 8.90186786651611 值得一提的是,无论是命中还是丢失,速度是一样的。当然,速度慢也得考虑字符串比较自身的开销问题。

a.contains(“a”)

字符串自带了包含方法,它可以检测字符串 a 中是否包含了 "a" ,如果包含了,就返回 true 。这是很直接的办法:

用这样简单的遍历得到结果 7.06464505195618 秒。

那么能不能更快一些呢?我们换一种思路,如果说我们仅仅是查找,那其实还有一种方法可以考虑,那就是

a.range(of: “a”)

Swift 中 String  还有一个自带的方案,那就是获取指定字符串在另一字符串的范围,用来提取活着修改字符串用,如果找不到,那么就返回 nil 。

这里我们用返回值是否为空来判断字符串是否包含,速度会是多少呢?

执行的结果是 6.38309478759766 秒。显然,这种方法的查找速度是比上边两种专门的查找要快的。


Cpp--字符串快速查找运用

对于c++中字符操作,在c中已经有了完整强大的操作函数,首先从一个函数说起:c_str()。 const char *c_str(); c_str()函数返回一个指向正规C字符串的指针, 内容与本s...
  • samkieth
  • samkieth
  • 2015-10-13 21:11:43
  • 1087

字符串快速查找(C#版)

BinaryTree.csusing System;using System.Collections;using System.Collections.Generic;using System.Tex...
  • ouailuo143
  • ouailuo143
  • 2011-06-09 20:57:00
  • 981

KMP算法的java实现,网上参考的

  • 2009年09月15日 15:12
  • 1KB
  • 下载

使用哈希表快速查找字符串的一种解决方案

必备知识: 什么是哈希表? 哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一...
  • jzjwonderful
  • jzjwonderful
  • 2016-09-09 11:26:03
  • 2310

VB快速查找大型文件中包含的字符串

关于查找大型文件中包含的字符串,一般都把文件内容读入到内存,然后在内存里进行比较,却不知这种办法有一个致命的弱点,那就是由于大量的内存申请和释放导致的内存颠簸,会使系统性能下降,严重影响了查找的速度。...
  • lyserver
  • lyserver
  • 2009-04-24 11:23:00
  • 8290

将大数据载入内存中检索字符串

这段代码主要实现了将一个几Gb大小的TXT文件载入到内存中,然后再利用内存的快速运算能力,查找字符串。...
  • jobbofhe
  • jobbofhe
  • 2016-04-18 22:02:55
  • 449

VB对数字/字符数组的快速排序.查找.

  数值与数组操作 Option Explicit 数值快速排序(从小到大) 函数:NumSortAZ 参数:Myarray Double数组,L 数组的左边界,R 数组右边界. 返回值:无 例子:...
  • MSTOP
  • MSTOP
  • 2008-10-10 22:31:00
  • 4681

C#字符串查找的优化

这两天改变了关键词库,要求将以前的旧资料包括新闻问答商机等的所有数据的关键词重新匹配生成一遍。先让老喻做了个功能页出来,生成12条数据大概要30、40秒左右,感觉太慢了,就自己再想想有没有更优的方法。...
  • shineran
  • shineran
  • 2009-01-08 14:42:00
  • 5385

查找指定字符串在字符串中第一次或最后一词出现的位置

在String类中提供了两种查找指定位置的字符串第一次出现的位置的方法   (1)public int indexOf(String str);//从字符串开始检索str,并返回第一次出现的位置,未...
  • qq_36607688
  • qq_36607688
  • 2016-11-21 01:34:14
  • 166

字符串数组中查找固定字符串

/* *在字符串数组中查找固定字符串 */ #include #include #define TRUE 1 #define FALSE 0int find_char(char **strings, ...
  • u013266600
  • u013266600
  • 2017-10-09 20:40:04
  • 427
收藏助手
不良信息举报
您举报文章:在字符串中 快速查找
举报原因:
原因补充:

(最多只允许输入30个字)