1

让我们想象一下,我们有一个简单的抽象输入表单,其目的是接受一些字符串,它可以由任何字符组成。

string = "mystical characters"

我们需要通过将第一个字符大写来处理这个字符串。是的,这是我们的主要目标。此后,我们需要在一些抽象视图模板中显示这个转换后的字符串。所以,问题是:我们真的需要检查第一个字符是否已经正确写入(大写)还是我们能够只写这个?

theresult = string.capitalize
=> "Mystical characters"

哪种方法更好:检查然后大写(如果需要)或强制大写?

4

6 回答 6

7

首先检查是否需要处理某些内容,因为String#capitalize不仅将第一个字符转换为大写,而且还将所有其他字符转换为小写。所以..

"First Lastname".capitalize == "First lastname"

这可能不是想要的结果。

于 2011-01-20T01:51:39.570 回答
4

如果我理解正确,您无论如何都会将字符串大写,那么为什么还要检查它是否已经大写呢?

于 2011-01-20T01:50:21.647 回答
2

根据Tonttu 的回答,我建议不要太担心,只需像这样大写:

new_string = string[0...1].capitalize + string[1..-1]
于 2011-01-20T02:48:15.760 回答
1

我遇到了 Tonttu 导入一堆名字的问题,我选择了:

  strs = "first lastname".split(" ")
  return_string = ""
  strs.each do |str|
    return_string += "#{str[0].upcase}#{str[1..str.length].downcase} "
  end
  return_string.chop

编辑:不可避免的重构(一年多)之后。

  "first lastname".split(" ").map do |str| 
    "#{str[0].upcase}#{str[1..str.length].downcase}"
  end.join(' ')

虽然绝对不容易阅读,但它在声明更少的临时变量的同时得到相同的结果。

于 2011-02-06T20:35:20.883 回答
0

我想你可以写这样的东西:

string.capitalize unless string =~ /^[A-Z].*/

就我个人而言,我会做

字符串大写

于 2011-01-20T01:49:20.727 回答
0

除非您要为要检查的大写字符串设置一个标志,而不是只大写而不检查。

此外,大写本身可能正在执行一些检查。

于 2011-01-20T02:29:54.787 回答