Lua实现的常用string库

常用字符串操作函数,使用Lua实现

  1. --[[  
  2.     命名空间: xstr  
  3.     作者: apache(email: [email protected]; website: http://hi.baidu.com/hqwfreefly)  
  4.     版本号: 0.2 (from 0.1)  
  5.     创建日期: 2010-10-17  
  6.     函数列表: trim, capitalize, count, startswith, endswith, expendtabs, isalnum, isalpha, isdigit, islower, isupper,  
  7.               join, lower, upper, partition, zfill, ljust, rjust, center, dir, help  
  8.     声明: 该软件为自由软件,遵循GPL协议。如果你需要为xstr增加函数,请在func_list中添加函数名,并在help函数中为其撰写帮助文档  
  9.     帮助: xstr:dir() 列出命名空间下的函数列表。xstr:help("func")查看func的帮助文档  
  10.     修改历史: 修改count函数的实现,使用gsub统计个数  
  11. --]]  
  12. xstr = {  
  13.     func_list = "trim, capitalize, count, startswith, endswith, expendtabs, isalnum, isalpha, isdigit, islower, isupper, join, lower, upper, partition, zfill, ljust, rjust, center, dir, help",  
  14.     --[[去除str中的所有空格。成功返回去除空格后的字符串,失败返回nil和失败信息]]  
  15.     trim = function (self, str)  
  16.         if str == nil then  
  17.             return nil"the string parameter is nil"  
  18.         end  
  19.         str = string.gsub(str, " ", "")  
  20.         return str  
  21.     end,  
  22.     --[[将str的第一个字符转化为大写字符。成功返回转换后的字符串,失败返回nil和失败信息]]  
  23.     capitalize = function(self, str)  
  24.         if str == nil then  
  25.             return nil"the string parameter is nil"  
  26.         end  
  27.         local ch = string.sub(str, 11)  
  28.         local len = string.len(str)  
  29.         if ch < 'a' or ch > 'z' then  
  30.             return str  
  31.         end  
  32.         ch = string.char(string.byte(ch) - 32)  
  33.         if len == 1 then  
  34.             return ch  
  35.         else  
  36.             return ch .. string.sub(str, 2, len)  
  37.         end  
  38.     end,  
  39.     --[[统计str中substr出现的次数。from, to用于指定起始位置,缺省状态下from为1,to为字符串长度。成功返回统计个数,失败返回nil和失败信息]]  
  40.     count = function(self, str, substr, from, to)  
  41.         if str == nil or substr == nil then  
  42.             return nil"the string or the sub-string parameter is nil"  
  43.         end  
  44.         from = from or 1  
  45.         if to == nil or to > string.len(str) then  
  46.             to = string.len(str)  
  47.         end  
  48.         local str_tmp = string.sub(str, from ,to)  
  49.         local n = 0  
  50.         _, n = string.gsub(str, substr, '')  
  51.         return n  
  52.     end,  
  53.     --[[判断str是否以substr开头。是返回true,否返回false,失败返回失败信息]]  
  54.     startswith = function(self, str, substr)  
  55.         if str == nil or substr == nil then  
  56.             return nil"the string or the sub-stirng parameter is nil"  
  57.         end  
  58.         if string.find(str, substr) ~= 1 then  
  59.             return false  
  60.         else  
  61.             return true  
  62.         end  
  63.     end,  
  64.     --[[判断str是否以substr结尾。是返回true,否返回false,失败返回失败信息]]  
  65.     endswith = function(self, str, substr)  
  66.         if str == nil or substr == nil then  
  67.             return nil"the string or the sub-string parameter is nil"  
  68.         end  
  69.         str_tmp = string.reverse(str)  
  70.         substr_tmp = string.reverse(substr)  
  71.         if string.find(str_tmp, substr_tmp) ~= 1 then  
  72.             return false  
  73.         else  
  74.             return true  
  75.         end  
  76.     end,  
  77.     --[[使用空格替换str中的制表符,默认空格个数为8。返回替换后的字符串]]  
  78.     expendtabs = function(self, str, n)  
  79.         if str == nil then  
  80.             return nil"the string parameter is nil"  
  81.         end  
  82.         n = n or 8  
  83.         str = string.gsub(str, "\t", string.rep(" ", n))  
  84.         return str  
  85.     end,  
  86.     --[[如果str仅由字母或数字组成,则返回true,否则返回false。失败返回nil和失败信息]]  
  87.     isalnum = function(self, str)  
  88.         if str == nil then  
  89.             return nil"the string parameter is nil"  
  90.         end  
  91.         local len = string.len(str)  
  92.         for i = 1, len do  
  93.             local ch = string.sub(str, i, i)  
  94.             if not ((ch >= 'a' and ch <= 'z'or (ch >= 'A' and ch <= 'Z'or (ch >= '0' and ch <= '9')) then  
  95.                 return false  
  96.             end  
  97.         end  
  98.         return true  
  99.     end,  
  100.     --[[如果str全部由字母组成,则返回true,否则返回false。失败返回nil和失败信息]]  
  101.     isalpha = function(self, str)  
  102.         if str == nil then  
  103.             return nil"the string parameter is nil"  
  104.         end  
  105.         local len = string.len(str)  
  106.         for i = 1, len do  
  107.             local ch = string.sub(str, i, i)  
  108.             if not ((ch >= 'a' and ch <= 'z'or (ch >= 'A' and ch <= 'Z')) then  
  109.                 return false  
  110.             end  
  111.         end  
  112.         return true  
  113.     end,  
  114.     --[[如果str全部由数字组成,则返回true,否则返回false。失败返回nil和失败信息]]  
  115.     isdigit = function(self, str)  
  116.         if str == nil then  
  117.             return nil"the string parameter is nil"  
  118.         end  
  119.         local len = string.len(str)  
  120.         for i = 1, len do  
  121.             local ch = string.sub(str, i, i)  
  122.             if ch < '0' or ch > '9' then  
  123.                 return false  
  124.             end  
  125.         end  
  126.         return true  
  127.     end,  
  128.     --[[如果str全部由小写字母组成,则返回true,否则返回false。失败返回nil和失败信息]]  
  129.     islower = function(self, str)  
  130.         if str == nil then  
  131.             return nil"the string parameter is nil"  
  132.         end  
  133.         local len = string.len(str)  
  134.         for i = 1, len do  
  135.             local ch = string.sub(str, i, i)  
  136.             if ch < 'a' or ch > 'z' then  
  137.                 return false  
  138.             end  
  139.         end  
  140.         return true  
  141.     end,  
  142.     --[[如果str全部由大写字母组成,则返回true,否则返回false。失败返回nil和失败信息]]  
  143.     isupper = function(self, str)  
  144.         if str == nil then  
  145.             return nil"the string parameter is nil"  
  146.         end  
  147.         local len = string.len(str)  
  148.         for i = 1, len do  
  149.             local ch = string.sub(str, i, i)  
  150.             if ch < 'A' or ch > 'Z' then  
  151.                 return false  
  152.             end  
  153.         end  
  154.         return true  
  155.     end,  
  156.     --[[使用substr连接str中的每个字符,返回连接后的新串。失败返回nil和失败信息]]  
  157.     join = function(self, str, substr)  
  158.         if str == nil or substr == nil then  
  159.             return nil"the string or the sub-string parameter is nil"  
  160.         end  
  161.         local xlen = string.len(str) - 1  
  162.         if xlen == 0 then  
  163.             return str  
  164.         end  
  165.         local str_tmp = ""  
  166.         for i = 1, xlen do  
  167.             str_tmp = str_tmp .. string.sub(str, i, i) .. substr  
  168.         end  
  169.         str_tmp = str_tmp .. string.sub(str, xlen + 1, xlen + 1)  
  170.         return str_tmp  
  171.     end,  
  172.     --[[将str中的小写字母替换成大写字母,返回替换后的新串。失败返回nil和失败信息]]  
  173.     lower = function(self, str)  
  174.         if str == nil then  
  175.             return nil"the string parameter is nil"  
  176.         end  
  177.         local len = string.len(str)  
  178.         local str_tmp = ""  
  179.         for i = 1, len do  
  180.             local ch = string.sub(str, i, i)  
  181.             if ch >= 'A' and ch <= 'Z' then  
  182.                 ch = string.char(string.byte(ch) + 32)  
  183.             end  
  184.             str_tmp = str_tmp .. ch  
  185.         end  
  186.         return str_tmp  
  187.     end,  
  188.     --[[将str中的大写字母替换成小写字母,返回替换后的新串。失败返回nil和失败信息]]  
  189.     upper = function(self, str)  
  190.         if str == nil then  
  191.             return nil"the string parameter is nil"  
  192.         end  
  193.         local len = string.len(str)  
  194.         local str_tmp = ""  
  195.         for i = 1, len do  
  196.             local ch = string.sub(str, i, i)  
  197.             if ch >= 'a' and ch <= 'z' then  
  198.                 ch = string.char(string.byte(ch) - 32)  
  199.             end  
  200.             str_tmp = str_tmp .. ch  
  201.         end  
  202.         return str_tmp  
  203.     end,  
  204.     --[[将str以substr(从左向右查找)为界限拆分为3部分,返回拆分后的字符串。如果str中无substr则返回str, ''''。失败返回nil和失败信息]]  
  205.     partition = function(self, str, substr)  
  206.         if str == nil or substr == nil then  
  207.             return nil"the string or the sub-string parameter is nil"  
  208.         end  
  209.         local len = string.len(str)  
  210.         start_idx, end_idx = string.find(str, substr)  
  211.         if start_idx == nil or end_idx == len then  
  212.             return str, ''''  
  213.         end  
  214.         return string.sub(str, 1, start_idx - 1), string.sub(str, start_idx, end_idx), string.sub(str, end_idx + 1, len)  
  215.     end,  
  216.     --[[在str前面补0,使其总长度达到n。返回补充后的新串,如果str长度已经超过n,则直接返回str。失败返回nil和失败信息]]  
  217.     zfill = function(self, str, n)  
  218.         if str == nil then  
  219.             return nil"the string parameter is nil"  
  220.         end  
  221.         if n == nil then  
  222.             return str  
  223.         end  
  224.         local format_str = "%0" .. n .. "s"  
  225.         return string.format(format_str, str)  
  226.     end,  
  227.     -----------------------------------------------------------------------------------------------------------------------------------------  
  228.     --[[设置str的位宽,默认的填充字符为空格。对齐方式为左对齐(rjust为右对齐,center为中间对齐)。返回设置后的字符串。失败返回nil和失败信息]]  
  229.     ljust = function(self, str, n, ch)  
  230.         if str == nil then  
  231.             return nil"the string parameter is nil"  
  232.         end  
  233.         ch = ch or " "  
  234.         n = tonumber(n) or 0  
  235.         local len = string.len(str)  
  236.         return string.rep(ch, n - len) .. str  
  237.     end,  
  238.     rjust = function(self, str, n, ch)  
  239.         if str == nil then  
  240.             return nil"the string parameter is nil"  
  241.         end  
  242.         ch = ch or " "  
  243.         n = tonumber(n) or 0  
  244.         local len = string.len(str)  
  245.         return str .. string.rep(ch, n - len)  
  246.     end,  
  247.     center = function(self, str, n, ch)  
  248.         if str == nil then  
  249.             return nil"the string parameter is nil"  
  250.         end  
  251.         ch = ch or " "  
  252.         n = tonumber(n) or 0  
  253.         local len = string.len(str)  
  254.         rn_tmp = math.floor((n - len) / 2)  
  255.         ln_tmp = n - rn_tmp - len  
  256.         return string.rep(ch, rn_tmp) .. str .. string.rep(ch, ln_tmp)  
  257.     end,  
  258.     ------------------------------------------------------------------------------------------------------------------------------------------  
  259.     --[[显示xstr命名空间的所有函数名]]  
  260.     dir = function(self)  
  261.         print(self.func_list)  
  262.     end,  
  263.     --[[打印指定函数的帮助信息, 打印成功返回true,否则返回false]]  
  264.     help = function(self, fun_name)  
  265.         man = {  
  266.             ["trim"] = "xstr:trim(str) --> string | nil, err_msg\n  去除str中的所有空格,返回新串\n  print(xstr:trim(\"  hello wor ld \") --> helloworld",  
  267.             ["capitalize"] = "xstr:capitalize(str) --> string | nil, err_msg\n  将str的首字母大写,返回新串\n  print(xstr:capitalize(\"hello\") --> Hello",  
  268.             ["count"] = "xstr:count(str, substr [, from] [, to]) --> number | nil, err_msg\n  返回str中substr的个数, from和to用于指定统计范围, 缺省状态下为整个字符串\n  print(xstr:count(\"hello world!\", \"l\")) --> 3",  
  269.             ["startswith"] = "xstr:startswith(str, substr) --> boolean | nil, err_msg\n  判断str是否以substr开头, 是返回true,否返回false\n  print(xstr:startswith(\"hello world\", \"he\") --> true",  
  270.             ["endswith"] = "xstr:endswith(str, substr) --> boolean | nil, err_msg\n  判断str是否以substr结尾, 是返回true, 否返回false\n  print(xstr:endswith(\"hello world\", \"d\")) --> true",  
  271.             ["expendtabs"] = "xstr:expendtabs(str, n) --> string | nil, err_msg\n  将str中的Tab制表符替换为n格空格,返回新串。n默认为8\n  print(xstr:expendtabs(\"hello  world\")) --> hello        world",  
  272.             ["isalnum"] = "xstr:isalnum(str) --> boolean | nil, err_msg\n  判断str是否仅由字母和数字组成,是返回true,否返回false\n  print(xstr:isalnum(\"hello world:) 123\")) --> false",  
  273.             ["isalpha"] = "xstr:isalpha(str) --> boolean | nil, err_msg\n  判断str是否仅由字母组成,是返回true,否返回false\n  print(xstr:isalpha(\"hello WORLD\")) --> true",  
  274.             ["isdigit"] = "xstr:isdigit(str) --> boolean | nil, err_msg\n  判断str是否仅由数字组成,是返回true,否返回false\n  print(xstr:isdigit(\"0123456789\")) --> true",  
  275.             ["islower"] = "xstr:islower(str) --> boolean | nil, err_msg\n  判断str是否全部由小写字母组成,是返回true,否返回false\n  print(xstr:islower(\"hello world\")) --> true",  
  276.             ["isupper"] = "xstr:isupper(str) --> boolean | nil, err_msg\n  判断str是否全部由大写字母组成,是返回true,否返回false\n  print(xstr:isupper(\"HELLO WORLD\")) --> true",  
  277.             ["join"] = "xstr:join(str, substr) --> string | nil, err_msg\n  使用substr连接str中的每个元素,返回新串\n  print(xstr:join(\"hello\", \"--\")) --> h--e--l--l--o",  
  278.             ["lower"] = "xstr:lower(str) --> string | nil, err_msg\n  将str中的大写字母小写化,返回新串\n  print(xstr:lower(\"HeLLo WORld 2010\")) --> hello wold 2010",  
  279.             ["upper"] = "xstr:upper(str) --> string | nil, err_msg\n  将str中的小写字母大写化,返回新串\n  print(xstr:upper(\"hello world 2010\")) --> HELLO WORLD 2010",  
  280.             ["partition"] = "xstr:partition(str, substr) --> string, string, string | nil, err_msg\n  将str按照substr为界限拆分为3部分,返回拆分后的字符串\n  print(xstr:partition(\"hello*world\", \"wo\")) --> hello*  wo  rld",  
  281.             ["zfill"] = "xstr:zfill(str, n) --> string | nil, err_msg\n  在str前补0,使其总长度为n。返回新串\n  print(xstr:zfill(\"100\", 5)) --> 00100",  
  282.             ["ljust"] = "xstr:ljust(str, n, ch) --> string | nil, err_msg\n  按左对齐方式,使用ch补充str,使其位宽为n。ch默认为空格,n默认为0\n  print(xstr:ljust(\"hello\", 10, \"*\")) --> *****hello"

你可能感兴趣的:(Lua实现的常用string库)