Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 字符串的大小写_Ruby_String_Capitalization - Fatal编程技术网

Ruby 字符串的大小写

Ruby 字符串的大小写,ruby,string,capitalization,Ruby,String,Capitalization,让我们想象一下,我们有一个简单的抽象输入表单,其目的是接受一些字符串,这些字符串可以由任何字符组成 string = "mystical characters" 我们需要通过使第一个字符大写来处理这个字符串。是的,这是我们的主要目标。此后,我们需要在一些抽象视图模板中显示这个转换后的字符串。所以,问题是:我们真的需要检查第一个字符是否已经正确书写(大写),还是我们能够只写这个 theresult = string.capitalize => "Mystical characters"

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

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

theresult = string.capitalize
=> "Mystical characters"

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

我想你可以写以下内容:

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

就我个人而言,我只会写字符串。大写

我想你可以这样写:

string.capitalize unless string =~ /^[A-Z].*/
string.capitalize
就我个人而言,我只会做string.capitalize(大写)

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

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

如果需要处理某些内容,请先检查,因为它不仅会将第一个字符转换为大写,还会将所有其他字符转换为小写。所以

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

这可能不是想要的结果。

如果需要处理某些内容,请先检查,因为它不仅会将第一个字符转换为大写,还会将所有其他字符转换为小写。所以

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

这可能不是想要的结果。

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


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

除非您为要检查的大写字符串设置了一个标志,而不仅仅是在不检查的情况下大写

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

基于此,我建议不要太担心,只需这样资本化:

new_string = string[0...1].capitalize + string[1..-1]
基于此,我建议不要太担心,只需这样资本化:

new_string = string[0...1].capitalize + string[1..-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
编辑:一年后不可避免的重构


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

我遇到了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
编辑:一年后不可避免的重构


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

我认为您担心的是有点太深奥了。如果你的主要目标是使第一个字符大写,那么就这样做。我想你担心的是有些太深奥了。如果你的主要目标是使第一个字符大写,那么就这样做。是的,你是对的。但我担心这两种方法的利弊。我想,它们中的一个可能比另一个更好(更少的内存使用,等等)。如果你总是资本化,你总是会得到一个操作。如果您选中,然后大写,您将有两个操作。在这一级别进行基准测试是毫无意义的。就像Knuth所说的“过早优化是万恶之源”如果你那么担心优化,我认为你使用了错误的语言(我认为):P如果你将一个已经大写的字符串大写,那么你很可能得到相同的字符串。是的,你是对的。但我担心这两种方法的利弊。我想,它们中的一个可能比另一个更好(更少的内存使用,等等)。如果你总是资本化,你总是会得到一个操作。如果您选中,然后大写,您将有两个操作。在这一级别进行基准测试是毫无意义的。正如Knuth所说的“过早优化是万恶之源”,如果你对优化如此担忧,我认为你使用了错误的语言(我认为):P如果你将一个已经大写的字符串大写,那么你很可能得到相同的字符串。