Spinal Tap Case

题目

将字符串转换为 spinal case。Spinal case 是 all-lowercase-words-joined-by-dashes 这种形式的,也就是以连字符连接所有小写单词。

测试:

spinalCase("This Is Spinal Tap") 应该返回 "this-is-spinal-tap"。
spinalCase("thisIsSpinalTap") 应该返回 "this-is-spinal-tap"。
spinalCase("The_Andy_Griffith_Show") 应该返回 "the-andy-griffith-show"。
spinalCase("Teletubbies say Eh-oh") 应该返回 "teletubbies-say-eh-oh"。



思路

看测试用例,需要转换的字符串格式可以归为两类。第一类是利用空格、下划线等符号分解命名、还有第二类是在座诸位比较熟悉的驼峰命名法。以下称符号类型或驼峰类型。

符号类型转换形式是简单的,驼峰类型转换形式也是简单的,但这二者并不相同,怎么区分这二者就是一个难点了。我们可以先定一个可以达到的小目标,比如先把这两种字符串类型分开。博主的方法是将字符串的按照符号类型分解,如果分解后的数组长度为1也就说明了当前字符串不管正不正经,他都是一个驼峰类型的字符串。

str.split(/\W|_/).length==1

既然区分开两种字符串类型了,那就把两种字符串类型都转换成题目要求的那样:我-是-吴-彦-祖 这种类型。

驼峰类型转换很简单,只需要历遍字符串,使用正则表达式判断字符串中的某个字符是否为大写,如果是大写转换成小写再在前面加一根短短的东西。方法如下:

1     for(var i=0;i<str.length;i++){
2       if(/[A-Z]/.test(str[i])){
3         str=str.replace(str[i],"-"+str[i].toLowerCase());
4       }
5     }

符号类型就更简单了,只需要将字符串转换成小写并使用正则表达式分离再在每两个之间使用一根东西连接起来即可。

str=str.toLowerCase().split(/\W|_/).join("-");

总体代码如下:

 1 function spinalCase(str) {
 2   if(str.split(/\W|_/).length==1){
 3     for(var i=0;i<str.length;i++){
 4       if(/[A-Z]/.test(str[i])){
 5         str=str.replace(str[i],"-"+str[i].toLowerCase());
 6       }
 7     }
 8   }else str=str.toLowerCase().split(/\W|_/).join("-");
 9   return str;
10 }
时间: 2024-08-06 08:52:50

Spinal Tap Case的相关文章

Spinal Tap Case(freecodemap)

将字符串转换为 spinal case.Spinal case 是 all-lowercase-words-joined-by-dashes 这种形式的,也就是以连字符连接所有小写单词. 示例: spinalCase("This Is Spinal Tap") 应该返回 "this-is-spinal-tap". spinalCase("thisIsSpinalTap") 应该返回 "this-is-spinal-tap".

FreeCodeCamp( FCC)前端工程师 中级算法练习 分析与解答(全)(精)

[TOC] 说在前面 这是要一篇非常简单的新手能看懂的文章,希望你喜欢.由于在 freecodecamp 中貌似!?无法使用 ES6 的某些语法,未测试具体.所以基本上用古老?!的ES5,4写成,谢谢.在写本博文前没有参考过别人的做法,纯手打,我的方法肯定不是最好,只是以我自己喜欢的方式在写而已. 纯原创,转载请联系作者https//:[email protected].[email protected]. freecodecamp China 不明白API请参考MDN给出的解释 个别题目没有判

FCC上的javascript算法题之中级篇

FCC中的javascript中级算法题解答 中级算法的题目中用到了很多js的知识点,比如迭代,闭包,以及对json数据的使用等等,现在将自己中级算法的解答思路整理出来供大家参考讨论.欢迎大家提出新的思路,写出更简单的解法. 1.给一个包含两个数字的数组.返回这两个数字和它们之间所有数字的和. 说明:最小的数字并非总在最前面 如:sumAll([4, 1]) 应该返回 10. sumAll([5, 10]) 应该返回 45. function sumAll(arr) { var max=Math

java的事务处理

本文转自http://zhenchengchagangzi.iteye.com/blog/1159493 java的事务处理,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务.如果数据库操作在某一步没有执行或出现异常而导致事务失败,这样有的事务被执行有的就没有被执行,从而就有了事务的回滚,取消先前的操作..... 注:在Java中使用事务处理,首先要求数据库支持事务.如使用MySQL的事务功能,就要求MySQL的表类型为Innodb才支持事务.否则,在Java程序中做了commit或ro

Patient Comments: Osteomyelitis - Symptoms

http://www.medicinenet.com/osteomyelitis/patient-comments-879.htm I am 65 years old and was diagnosed with osteomyelitis of the right heel. I remember the pain, for a while I walked on the ball of my foot until being bedridden for several weeks till

JDBC、JTA、Spring的事务管理

Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. 事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作.       这样可以防止出现脏数据,防止数据库数据出现问题.开发中为了避免这种情况一般都会进行事务管理. JDBC中是通过Connection对象进行事务管理的Hibernate中是通过Transaction进行事务管理,处理方法与JDBC

jta 知识

JTA知识(转载原文地址:http://blog.csdn.net/it_man/article/details/7230215) Java Transaction API,译为Java事务API.JTA允许应用程序执行分布式事务处理——在两个或多个网络计算机资源上访问并且更新数据.JTA主要用于分布式的多个数据源的两阶段提交的事务,而JDBC的Connection提供的单个数据源的事务; 后者因为只涉及到一个数据源,所以其事务可以由数据库自己单独实现, 而JTA事务因为其分布式和多数据源的特性

全球100部最佳影片排行

全球100部最佳影片排行 以下是IMDB(美国著名影评网站)网民评出全球100部最佳影片 :  1. <教父>The Godfather 1972年 8.9 分  科波拉黑帮经典<教父>的首部,派拉蒙公司最成功的影片之一,坐稳IMDB头把交椅应属,众望所归.虽然评论界一致对<教父>系列的第2集推崇有佳,但大多数影迷似乎还是对<教父>情有独钟,这可能与马龙·白兰度极具个力的表演有关,直到今天他那种含 糊沙哑的声音与神秘莫测的表情都依然叫人着迷.  2. <

R语言 recommenderlab 包

recommend li_volleyball 2016年3月20日 library(recommenderlab) ## Warning: package 'recommenderlab' was built under R version 3.2.4 ## Loading required package: Matrix ## Loading required package: registry ## Loading required package: arules ## ## Attach