我有:
camelize
s.camelize # => "LikeSoCase"
给出了这个:
__
我正在寻找转换为双下划线"LikeSo__case"
以获得:
rename($image, $all.'.jpg'); // you can change to any extension you like
我怎样才能只追踪字符串的某个部分?
答案 0 :(得分:8)
最简单的选择是gsub你的字符串的一部分。
'like_so__case'.gsub(/(.*?)(__.*)/) { "#{$1.camelize}#{$2}" }
#=> "LikeSo__case"
更新
评论产生的更清洁,更快捷的方式。
'like_so__case__h'.sub(/(.*?)(?=__)/, &:camelize)
#=> "LikeSo__case__h"
答案 1 :(得分:1)
s = "like_so__case"
=> "like_so__case"
s.split('__', 2).tap { |s| s[0] = s[0].camelize }.join('__')
=> "LikeSo__case"
你当然可以用字符串方法
包装它答案 2 :(得分:1)
要获得此 try {
URL url = new URL(Vars.searchLink + Vars.searchWord);
conn = url.openConnection();
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
String inputLine;
while ((inputLine = br.readLine()) != null)
if(inputLine.contains("gene-id"))
break;
,我们可以这样做:
LikeSo__case
答案 3 :(得分:1)
您对需求的描述不太清楚。
从你的例外结果中,我将其理解为“将一个字符串的一部分用于一个模式”。我应该首先注意一点camelize
不是Ruby的类String
标准库的一部分。 ActiveSupport::Inflector
提供了它。
因此,如果您想将每个部分按照模式分割,请使用str.split('_').map(&:capitalize).join('_')
。在您的情况下,它返回'Like_So__Case'
。
Ruby的String
有另一个名为partition
的实例方法,它将字符串拆分为三个部分(数组):
所以str.partition('__').tap { |a| a[0] = a[0].split('_').map(&:capitalize).join }.join
应该是你在普通Ruby中的答案。
答案 4 :(得分:1)
无需依赖camelize
。简单地说,这个:
"like_so__case"
.gsub(/_?([a-z])([a-z]*)(?=.*__)/i){$1.upcase + $2.downcase}
# => "LikeSo__case"
答案 5 :(得分:0)
def camelize(s)
for i in 0..s.size-2 do
if s[i] == "_" and s[i+1] == "_"
next
elsif s[i] == "_" and s[i+1] != "_" and s[i-1] != "_"
s[i+1] = s[i+1].upcase
s[i] = ""
else
next
end
end
return s
end
使用此方法解决您的问题
答案 6 :(得分:0)
s = "like_so__case"
i = s.index('__')
#=> 7
s.tap { |s| s[0,i] = s[0,i].camelize }
#=> LikeSo__case
最后一行可以用两行代替:
s[0,i] = s[0,i].camelize
s
如果原始字符串不被改变,请写
s.dup.tap { |s| s[0,i] = s[0,i].camelize }