我需要计算在一段时间之前有多少字母是资本。因此,找到每个句点并检查字符,看它是否是资本。
以下是我认为可以完成这项任务的一些代码。
var s = 'Washington D.C. is a nice place.';
var counter = 0;
var totals = 0;
var n = s.indexOf(".",counter);
var times = s.split('.').length;
var l = n;
while(counter != times){
n = s.indexOf(".",l);
if(s.substring(n-1,1) == s.substring(n-1,1).toUpperCase())
totals++;
counter++;
l = n;
}
//totals should be 2
答案 0 :(得分:4)
这对我有用:
var s = 'Washington D.C. is a nice place.';
var foo = s.match(/[A-Z]\./g,s);
console.log(foo.length);
<强> jsFiddle example 强>
答案 1 :(得分:1)
@ j08691提供的答案是最有效的,但如果你需要一个使用基础而不是RegExp(比如学校作业或其他什么),我会选择这样的东西:
此版本在一段时间之前立即计算任何大写字母 。
var s = 'Washington D.C. is a nice place.';
var sLower = s.toLowerCase();
var i = 0, num = 0;
while(i < s.length - 1) {
if(s[i] !== sLower[i] && s[i+1] == '.') {
num++;
}
i++;
}
alert('Upper case: ' + num);
它在结构上与你拥有的相似,但效率更高。也可以修改为使用for循环而不是一段时间。
您的问题并不完全确定您所追求的是什么,因此此版本会计算字符串中第一个句点之前的所有大写字母:
var s = 'Washington D.C. is a nice place.';
var sLower = s.toLowerCase();
var i = 0, num = 0;
while(i < s.length && s[i] != '.') {
if(s[i] !== sLower[i]) {
num++;
}
i++;
}
alert('Upper case: ' + num);