focus on linux, c/c++, lua

求LUA达人进来解惑

首先,抱歉,这不是精华贴,占用了首页,如果耽搁了你的时间,再次抱歉。
进入主题,话说,有形如
&&123&&456&这样的字符串
我想修改其中一个&位置之前的数据,比如:
1,用789替换第1个&之前的数据
结果为:789&&123&&456&
2,用789替换第3个&之前的数据
结果为:&&789&&456&
3,用789替换第10个&之前的数据
结果为:因为没有第10个&, 保留原来的字符串&&123&&456&

要点:每个&为一个分隔符,如果有数据就写在&的前面,没有数据就留空。
所以&&&&&&&也是一个合法的输入

我尝试了各种string库的函数,结果还是没有整出来,坐起等高手解惑
对lua string库不是很熟悉的同学,请点击这里

posted on 2010-09-03 17:38 zuhd 阅读(1728) 评论(8)  编辑 收藏 引用 所属分类: lua

评论

# re: 求LUA达人进来解惑 2010-09-03 17:43 陈梓瀚(vczh)

我只知道如果用C#的话就是

string input="&&1&&72&&&&&";
string[] parts=input.Split("&".ToCharArray(), StringSplitOptions.None);
parts[2]="789";
input=parts.Aggregate("", (a,b)=>(a+b));

模拟之。  回复  更多评论   

# re: 求LUA达人进来解惑 2010-09-03 17:48 zuhd

@陈梓瀚(vczh)
寒。。。。用别的语言写出来确实不是件难事。
我的问题是如何用形如lua的string.gsub()等函数把问题解决了,因为我这个是在lua里遇到的问题。  回复  更多评论   

# re: 求LUA达人进来解惑 2010-09-03 19:40 溪流

@zuhd
你这个需求不太可能一句话解决啊,如果没有提供库函数来分割/合并,那你只有手工去查找替换了  回复  更多评论   

# re: 求LUA达人进来解惑 2010-09-03 20:10 right

不行,自己写个或copy个函数导出到lua里用就是了。  回复  更多评论   

# re: 求LUA达人进来解惑 2010-09-03 23:33 flyinghearts

-- lua 5.1.4

function mysub(str, sep, n)
  local i = 0
  return str:gsub(".-" .. sep, function ()
    i = i + 1
    if (i == n) then return "789" .. sep end
    end
  )
end

str = "&&123&&456&"
sep = '&'
--for n = 1, 11, 2 do
for _, n in ipairs({1, 3, 10}) do
  local ss = mysub(str, sep, n)
  print(ss)
end

print(mysub("&&&&&",sep,2))

 

  回复  更多评论   

# re: 求LUA达人进来解惑 2010-09-04 11:11 zuhd

@right
没打算通过用宿主语言提供的函数来实现,这不是我目的  回复  更多评论   

# re: 求LUA达人进来解惑 2010-09-04 11:12 zuhd

@flyinghearts
犀利,学习了  回复  更多评论   

# re: 求LUA达人进来解惑 2010-09-06 12:28 陈梓瀚(vczh)

@zuhd
我认为你需要的是一个split函数,而不是gsub。谢谢。  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理