【问题标题】:Ruby: Remove whitespace chars at the beginning of a stringRuby:删除字符串开头的空白字符
【发布时间】:2011-04-29 07:12:08
【问题描述】:

编辑:我通过使用strip!remove leading and trailing whitespaces as I show in this video 解决了这个问题。然后,我通过迭代和添加空格来恢复数组每个字符串末尾的空格。这个问题不同于“欺骗”,因为我的意图是在末尾保留空格。然而,脱!如果这是您的意图,将删除前导和尾随空格。 (我本来会这样回答的,但由于这被错误地标记为骗子,我只能编辑我的原始问题以包含这个。)

我有一个单词数组,我试图删除单词开头而不是结尾可能存在的任何空格。带走!只处理字符串的结尾。我想从字符串的开头删除空格。

example_array = ['peanut', ' butter', 'sammiches']
desired_output = ['peanut', 'butter', 'sammiches']

如您所见,并非数组中的所有元素都有空格问题,所以我不能像所有元素都以单个空格字符开头那样删除第一个字符。

完整代码:

words = params[:word].gsub("\n", ",").delete("\r").split(",")
words.delete_if {|x| x == ""}
words.each do |e|
  e.lstrip!
end

用户可以在表单上输入的示例文本:

Corn on the cob,
Fibonacci,
StackOverflow
Chat, Meta, About
Badges
Tags,,
Unanswered

【问题讨论】:

  • 我的第一个问题是,你是如何创建这些数组的?通过使用子字符串提取拆分其他字符串?如果是这样,您可能希望显示该代码,我们可以帮助解决根本原因。
  • 刚刚添加了上面的完整代码。 :)
  • 你能提供一些示例文本吗?
  • 没问题!哇你们!非常感谢大家的帮助!
  • 没问题@Melanie。这就是我们在这里所做的。拆开别人的代码,让它唱歌!

标签: ruby arrays string whitespace


【解决方案1】:

String#lstrip(或String#lstrip!)是what you're after

desired_output = example_array.map(&:lstrip)

更多关于你的代码的 cmets:

  1. delete_if {|x| x == ""} 可以替换为 delete_if(&:empty?)
  2. 除非你想要reject!,因为delete_if 只会返回一个不同的数组,而不是修改现有的数组。
  3. words.each {|e| e.lstrip!} 可以替换为 words.each(&:lstrip!)
  4. delete("\r") 如果您在 Windows 机器上阅读 windows 风格的文本文档,或者在 Unix 机器上阅读 Unix 风格的文档,那么delete("\r") 应该是多余的
  5. split(",") 可以替换为split(", ")split(/, */)(或/, ?/,如果最多有一个空格)

所以现在看起来像:

words = params[:word].gsub("\n", ",").split(/, ?/)
words.reject!(&:empty?)
words.each(&:lstrip!)

如果您有示例文本,我可以提供更多建议。

编辑:好的,开始吧:

temp_array = text.split("\n").map do |line|
  fields = line.split(/, */)
  non_empty_fields = fields.reject(&:empty?)
end
temp_array.flatten(1)

使用的方法有String#splitEnumerable#mapEnumerable#rejectArray#flatten

Ruby 也有用于解析逗号分隔文件的库,但我认为它们在 1.8 和 1.9 之间略有不同。

【讨论】:

  • 当然是!我觉得自己像个白痴。一遍又一遍地扫描 rdocs 并没有看到它。
  • 只是添加... String.strip 将处理前导和尾随空格
  • 如果你想修改你的数组,或者只是a.each(&:lstrip!)
【解决方案2】:
> ' string '.lstrip.chop
=> "string"

去掉两个空格...

【讨论】:

  • 'string'.lstrip.rstrip 怎么样,因为 .chop 会从末尾删除一个字符
  • 对于大卫的评论:我们可以使用.strip 来获得与.lstrip.rstrip 相同的结果ruby-doc.org/core-2.2.2/String.html#method-i-strip
  • 考虑编辑您的答案以添加更正原始答案的更新。
猜你喜欢
  • 1970-01-01
  • 2015-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 2011-11-23
  • 2017-09-27
相关资源
最近更新 更多