黑客等级上的在线挑战。
问题描述艾丽斯用CamelCase写了一个单词序列,作为一个字母字符串,
S,具有以下属性:它是一个或多个由英文字母组成的单词的连接。第一个单词中的所有字母都是小写字母。对于后面的每个单词,第一个字母是大写字母,其余字母是小写字母。给定时,在新行上打印单词数。输入格式包含字符串S的一行。约束输出格式打印字符串中的字数。样本输入saveChangesInTheEditor样本输出5
public class Solution {
private static int solve(String input) {
int len = input.length();
if (len == 0) {
return 0;
}
int count = 1;
for (int i = 0; i < len; i++) {
char c = input.charAt(i);
if ('A' <= c && c <= 'Z') {
count++;
}
else if (c == ' ') {
break;
}
}
return count;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.next();
System.out.println(solve(s));
}
}发布于 2016-12-27 08:59:24
Character.isUpperCase(char)、Character.isLowerCase(char)和Character.isWhitespace(char)函数非常有用,而不是进行容易出错和语言受限的手动检查。而且,String.isEmpty()总是比String.length() == 0更好的检查。getCamelCaseWordCount(String),按照一些Java命名准则(有效Java由乔舒亚·布洛赫编写)。len一次,而不需要检查空值。事实上,这也不是必需的,因为一般代码也会处理这个问题。只需使用空检查将单词计数的初始值设置为0或1,这取决于输入是空的还是非空的。分别使用。您不需要提前返回以避免循环,因为循环一开始不会迭代。Strings是不可变的,在同一个String对象上反复调用.length()没有太多开销,所以即使您关心循环,也不需要len。len业务,并使用for-each循环。类似于: for(char c: input.toCharArray()){//for JDK 1.5+ .}或,for(char c: input.chars()){//for JDK 1.8+ .}long,而不是int。这是根据Stream编写的。把一切都放在一起,
public class Test{
public static long getCamelCaseWordCountNormal(String in){
long words = in.isEmpty() ? 0 : 1;
for(char c : in.toCharArray()){
if(Character.isUpperCase(c)){
words++;
}
}
return words;
}
public static long getCamelCaseWordCountStreams(String in){
return in.isEmpty() ? 0 : 1 + in.chars().filter(Character::isUpperCase).count();
}
}https://codereview.stackexchange.com/questions/150917
复制相似问题