以下方法应将"CamelCase"
转换为def zebulansNightmare(string)
string.gsub(/_(.)/){$1.upcase}
end
。
"camel_case"
使用字符串gsub(/_(.)/)
,我希望c
与_
之后的$1
匹配。我知道_
是第一个匹配的字母:大写字母。但它的工作原理就是用_
代替大写字母。为什么private void setAlarm(Calendar targetCal,Boolean iscancel) {
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), RQS_1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
if (iscancel==true)
{
alarmManager.cancel(pendingIntent);
}
else {
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
}
}
消失了?
答案 0 :(得分:2)
你是$1
是捕获的值,但gsub
与之前的_
匹配,并且整个匹配被替换。您需要将_
重新插入结果:
"camel_case".gsub(/_(.)/){"_#{$1.upcase}"}
请参阅IDEONE demo
顺便说一句,如果你只打算匹配_
后跟一个字母(为了不浪费时间和资源试图将非字母变为大写),你可以使用以下正则表达式:
/_(\p{Ll})/
其中\p{Ll}
是任何小写的Unicode字母。
答案 1 :(得分:1)
def zebulans_nightmare(string)
string.gsub(/\B_[a-z0-9]/) { |s| s[1].upcase }
end
zebulans_nightmare("case_of_snakes")
#=> "caseOfSnakes"
zebulans_nightmare("case_of_3_snakes")
#=> "caseOf3Snakes"
zebulans_nightmare("_case_of_3_snakes")
#=> "_caseOf3Snakes"