【问题标题】:How can I detect "excessive spaces" in a string?如何检测字符串中的“过多空格”?
【发布时间】:2015-07-04 02:34:14
【问题描述】:

我正在用 Lua 制作一个简单的 android 游戏,其中一个设置游戏的步骤是设置玩家输入的单词(或句子;基本上是一个字符串)。 “单词”可能有空格,但我想禁止玩家输入连续有两个或多个空格的字符串,比如"fly bird"

我尝试使用string.match(word, " ")string.match(word, "%s%s")string.match(word, "%s+%s+"),这些都不起作用,不知何故,最后一个总是“检测”双空格,不管它是否有空格。

如何检测字符串中的一行是否有多个空格? (只是检测,而不是替换,所以我可以向玩家发送警告消息。)

【问题讨论】:

  • 这些都应该有效。发布一个显示失败的最小代码,也许有一些关于你如何检查返回值的东西。另外,find() 可能是一个更好的工具。
  • 我在带有其他几个条件的 if 语句中使用了它。代码类似于if( word == nil or word == '' or string.match(word, "!") or string.match(word, "%s%s") then invalidWordWarningMessage() else
  • 好吧,您输入的代码应该可以工作。看起来虫子藏在其他地方。在此 if 声明之前,您是否尝试过 print(word)?也许,这不是你所期望的?无论哪种方式,请考虑使用find() 而不是match() - 在您的情况下更自然。
  • 好吧,问题不在于字符串的输入,因为当单词没有任何这些匹配项时(我没有验证多个空格),程序应该打印这个词给玩家,它工作正常。

标签: string lua


【解决方案1】:

如果您感兴趣的恰好是两个空格,只需使用find

word:find('  ')

它将返回两个连续空格第一次出现的范围。

【讨论】:

  • @rpattiso,是的,谢谢!!我到底是怎么打出这个错字的 O_o
  • word:find(' +') 可能更适合匹配两个 或更多 个空格。 (编辑:奇怪的是它不允许我在评论中连续放置两个空格 - 这不是错字)
  • 在这种情况下使用'%s+'。更详细
  • @Sergii 这有点违反直觉 - 运算符并不表示 附加 匹配,它只是修改了前一个字符的匹配方式。我自己测试了它,%s+ 实际上匹配了一个只包含一个空格的字符串。 (总是测试失败和成功!)
  • @nkorth 对不起,我的错 - 我误解了你在这次谈话中的第二条评论。你的意思是 find('+') - 两个空格,对吧?
【解决方案2】:
input = input:gsub("%s+", " ")

上面的代码应该接受输入并删除所有多余的空格并用 1 个空格替换它。

【讨论】:

    猜你喜欢
    • 2018-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多