将数组中的每个单词大写

Capitalize each word in an array

我正在尝试将一个数组大写,其中一些字符串由多个单词组成,例如:

array = ["the dog", "the cat", "new york"]

我尝试使用:

array.map(&:capitalize)

但这只是将每个字符串的第一个字母大写。有什么建议么? (我对编码很陌生^_^)

我想要的输出是:

["The Dog", "The Cat", "New York"]

您可以为数组的每个字符串使用类似这样的内容:

string.split(' ').map(&:capitalize).join(' ')

The documentation for String#capitalise 说:

Returns a copy of str with the first character converted to uppercase and the remainder to lowercase.

那不是你想要做的。所以你需要写一些自定义的东西。

例如:

array.map { |string| string.gsub(/\b[a-z]/, &:upcase) }

我不清楚 if/how 您打算处理其他输入,例如 all-caps,或带连字符的单词,或多行,...但是如果您的要求变得更详细,那么您可能需要扩展此实现。

或者,我更愿意使用 Ruby#gsub 并使它更像是一个对象,它可以每隔一段时间 reusable。但在我们开始之前,您需要阅读以下 Ruby 的字符串方法:

  1. String#gsub Method
  2. String#capitalize Method
  3. Read this blog too to have a view of how you can use gsub

我相信 capitalizeupcase 方法可以使用,您将在下面的解决方案中看到我是如何使用它的。这将处理您的数组中有驼峰大小写以及连字符的额外情况:

# frozen_string_literal: true

def converter(string)
  string.capitalize.gsub(/\b[a-z]/, &:upcase)
end

array_name = ['the Dog', 'the cat', 'new york', 'SlACKoVeRFLoW', 'OlAoluwa-Afolabi']
print array_name.map(&method(:converter))

如您所见,我稍微更改了数组。我会建议你使用 string with single-quotes (i.e '') 并使用 double-quotes (i.e " ") when you want to do string concatenation.

:

  1. 我相信我的解决方案可以进一步扩展。可以对其进行审查以适应各种生产力和边缘情况。所以你可以找到这样的数组并用它进行测试,并进一步扩展解决方案。
  2. 我用的是Ruby2.7.1

您可以使用:

array.map(&:upcase)

https://apidock.com/ruby/String/upcase