Lua判断字符串前缀是否为指定字符的3种方法

在写 lua debugger 的时候,我需要判断一个字符串的前缀是不是 "@" 。

有三个方案:

1.比较直观的是 string.sub(str,1,1) == "@"
2.感觉效率比较高的是 string.byte(str) == 64
3.或者是 string.find(str,"@") == 1

我推荐第三种。(注:在此特定运用环境下。因为用于判定 source 的文件名,大多数情况都是 @ 开头。如果结果为非,则性能较低)

第一方案 string.sub 会在生成子串的时候做一次字符串 hash ,感觉效率会略微低一些。

第二方案效率应该是最好,但是需要记住 @ 的 ascii 码 64 。如果前缀是多个字符也不适用。

性能对比测试:

代码如下:

string.find(sb, "@") == 1 3.671
string.find(sb, "^@") ~= 1 3.735
string.byte(sa) == 64 2.14
string.char(string.byte(sb)) == "@" 4.375
string.sub(sb,1,1) == "@" 2.766
sb[1] == "@" 0.984

要想解决不以@开头时的性能问题,可以改成这样:

代码如下:

string.find(str,"^@") == 1

(0)

相关推荐

  • Lua判断字符串前缀是否为指定字符的3种方法

    在写 lua debugger 的时候,我需要判断一个字符串的前缀是不是 "@" . 有三个方案: 1.比较直观的是 string.sub(str,1,1) == "@" 2.感觉效率比较高的是 string.byte(str) == 64 3.或者是 string.find(str,"@") == 1 我推荐第三种.(注:在此特定运用环境下.因为用于判定 source 的文件名,大多数情况都是 @ 开头.如果结果为非,则性能较低) 第一方案 s

  • python统计字符串中指定字符出现次数的方法

    本文实例讲述了python统计字符串中指定字符出现次数的方法.分享给大家供大家参考.具体如下: python统计字符串中指定字符出现的次数,例如想统计字符串中空格的数量 s = "Count, the number of spaces." print s.count(" ") x = "I like to program in Python" print x.count("i") PS:本站还提供了一个关于字符统计的工具,感兴

  • C#判断字符串中是否包含指定字符串及contains与indexof方法效率问题

    正文  #方法一:使用string.Contains方法 string.Contains是大小写敏感的,如果要用该方法来判断一个string是否包含某个关键字keyword,需要把这个string和这个keyword都转成小写或大写再调用Contains方法: string key = "bbb"; string temp = "aaaBBBcccDDD"; bool isContains= temp.ToLower().Contains(key.ToLower()

  • java 判断字符串中是否有重复字符的示例

    如下所示: /** * 判断字符串是否包含重复字符 * @param str * @return */ public static boolean containRepeatChar(String str){ if(str==null||str.isEmpty()){ return false; } char[] elements=str.toCharArray(); for(char e:elements){ if(str.indexOf(e)!=str.lastIndexOf(e)){ re

  • Java如何去掉指定字符串的开头的指定字符

    Java去掉指定字符串的开头的指定字符 /** * 去掉指定字符串的开头的指定字符 * @param stream 原始字符串 * @param trim 要删除的字符串 * @return */ public static String StringStartTrim(String stream, String trim) { // null或者空字符串的时候不处理 if (stream == null || stream.length() == 0 || trim == null || tr

  • 总结PHP删除字符串最后一个字符的三种方法

    一.前言 从数据库中select()读取一对多的信息时,经常需要将取出的数组用某个特定的字符分割,然后拼接成字符串. 常见的语法格式: foreach ($arr as $key => $value) { $arr_str = $arr['x_id'] . ',' . $arr_str; } 假设字符数组 $arr 中的字符分别为 arr[0] = 'a'; arr[1] = 'b'; arr[2] = 'c'; 则,拼接后的 $arr_str 字符串为 a,b,c, 这个时候,就需要我们对最后

  • JS判断字符串变量是否含有某个字串的实现方法

    JS判断字符串变量是否含有某个字串的实现方法 varCts = "bblText"; if(Cts.indexOf("Text") > 0 ){ alert('Cts中包含Text字符串'); } indexOf用法: 返回 String 对象内第一次出现子字符串的字符位置. strObj.indexOf(subString[, startIndex]) 参数 strObj 必选项.String 对象或文字. subString 必选项.要在 String 对

  • Python判断字符串是否为字母或者数字(浮点数)的多种方法

    str为字符串s为字符串 str.isalnum() 所有字符都是数字或者字母 str.isalpha() 所有字符都是字母 str.isdigit() 所有字符都是数字 str.isspace() 所有字符都是空白字符.t.n.r 检查字符串是数字/浮点数方法 float部分 >> float('Nan') nan >> float('Nan') nan >> float('nan') nan >> float('INF') inf >> fl

  • JS与jQuery判断文本框还剩多少字符可以输入的方法

    本文实例讲述了JS与jQuery判断文本框还剩多少字符可以输入的方法.分享给大家供大家参考,具体如下: javascript部分: function $(id) { return document.getElementById(id); } var maxLen=255; function checkMaxInput(){ if($("summary").value.length>maxLen){ $("summary").value=$("summ

  • PHP去除字符串最后一个字符的三种方法实例

    前言 本文讲讲PHP中如何正确的去除字符串中的最后一个字符,之前跟大家分享过一篇关于PHP去除字符串最后一个字符的三种方法的文章,但是没给出实例,下面话不多说,直接上代码,相信一眼就能看出来了,直接将下面代码复制粘贴到自己本地服务器下,运行即可. 实例代码 $a = 'http://www.mafutian.net/'; $b = 'http://www.mafutian.net'; // 错误的方式: $len = strlen($a) - 1; $a{$len} = ''; // $a[$l

随机推荐