【发布时间】:2012-10-17 13:36:29
【问题描述】:
我想找到一种高效的方式(不扫描字符串10,000次,或者创建大量中间字符串来保存临时结果,或者字符串抨击等)来编写一个接受的方法一个字符串,并确定它是否满足以下条件:
- 长度至少为 2 个字符
- 第一个字符是大写的
- 第一个字符之后的剩余子字符串至少包含 1 个小写字符
这是我目前的尝试:
private boolean isInProperForm(final String token) {
if(token.length() < 2)
return false;
char firstChar = token.charAt(0);
String restOfToken = token.substring(1);
String firstCharAsString = firstChar + "";
String firstCharStrToUpper = firstCharAsString.toUpperCase();
// TODO: Giving up because this already seems way too complicated/inefficient.
// Ignore the '&& true' clause - left it there as a placeholder so it wouldn't give a compile error.
if(firstCharStrToUpper.equals(firstCharAsString) && true)
return true;
// Presume false if we get here.
return false;
}
但正如您所见,我已经有 1 个 char 和 3 个临时字符串,但感觉有些不对劲。一定有更好的方法来写这个。这很重要,因为此方法将被调用数千次(对于文本文档中的每个标记化单词)。所以它真的需要高效。
提前致谢!
【问题讨论】:
-
为什么不试试
StringBuilder? -
如果它只会被调用数千次(相对于数百万或数十亿),在它成为问题之前不要担心效率。
-
如果删除
&& true会产生编译时错误,那么问题就更大了…… -
@RohitJain:实际上这里不需要任何字符串。
-
使用正则表达式,直到您测量了性能并确定这是一个问题