Java:确定字符串是否满足多个条件的有效方法?
我想找到一种有效的方法(不扫描字符串10000次,或创建大量中间字符串以保存临时结果,或字符串破坏等)来编写一个接受字符串并确定其是否满足以下条件的方法:Java:确定字符串是否满足多个条件的有效方法?,java,string,algorithm,Java,String,Algorithm,我想找到一种有效的方法(不扫描字符串10000次,或创建大量中间字符串以保存临时结果,或字符串破坏等)来编写一个接受字符串并确定其是否满足以下条件的方法: 长度至少为2个字符 第一个字符是大写的 第一个字符后的剩余子字符串至少包含1个小写字符 以下是我迄今为止的尝试: private boolean isInProperForm(final String token) { if(token.length() < 2) return false; cha
- 长度至少为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;
}
私有布尔值IsInProperty(最终字符串标记){
if(token.length()<2)
返回false;
char firstChar=token.charAt(0);
String restOfToken=token.substring(1);
字符串firstCharacterString=firstChar+“”;
字符串firstCharStrToUpper=firstCharAsString.toUpperCase();
//TODO:放弃,因为这看起来已经太复杂/低效了。
//忽略“&&true”子句-将其保留为占位符,这样就不会出现编译错误。
if(firstCharstrToper.equals(firstCharAsString)&&true)
返回true;
//如果我们到了这里,就假定是假的。
返回false;
}
但正如您所看到的,我已经有了1个char
和3个temp字符串,有些东西感觉不太对劲。一定有更好的方法写这个。这很重要,因为这个方法将被调用成千上万次(对于文本文档中的每个标记化单词)。所以它真的需要有效率
提前谢谢 要查找第一个字符是否为大写:
Character.isUpperCase(token.charAt(0))
要检查是否至少有一个小写字母:
if(Pattern.compile("[a-z]").matcher(token).find()) {
//At least one lowercase
}
要查找第一个字符是否为大写,请执行以下操作:
Character.isUpperCase(token.charAt(0))
要检查是否至少有一个小写字母:
if(Pattern.compile("[a-z]").matcher(token).find()) {
//At least one lowercase
}
要检查第一个字符是否为大写,可以使用:
Character.isUpperCase(s.charAt(0))
要检查第一个字符是否为大写,可以使用:
Character.isUpperCase(s.charAt(0))
第一个标准就是
长度
——该数据缓存在字符串对象中,不需要遍历字符串
您可以使用来确定第一个字符是否为大写。也不需要遍历字符串
最后一个条件要求对字符串进行一次遍历,并在第一次找到小写字符时停止
另外,2+3标准组合的另一种选择是使用a(不是更高效,而是更优雅):
正则表达式正在检查字符串是否以大写字母开头,然后后跟至少包含一个小写字符的任何序列。第一个标准就是
长度
-此数据缓存在string对象中,不需要遍历字符串
您可以使用来确定第一个字符是否为大写。也不需要遍历字符串
最后一个条件要求对字符串进行一次遍历,并在第一次找到小写字符时停止
另外,2+3标准组合的另一种选择是使用a(不是更高效,而是更优雅):
正则表达式正在检查字符串是否以大写字母开头,然后后跟至少包含一个小写字符的任何序列。此函数应涵盖它。每个字符只检查一次,不创建任何对象
public static boolean validate(String token) {
if (token == null || token.length() < 2) return false;
if (!Character.isUpperCase(token.charAt(0)) return false;
for (int i = 1; i < token.length(); i++)
if (Character.isLowerCase(token.charAt(i)) return true;
return false;
公共静态布尔验证(字符串标记){
if(token==null | | token.length()<2)返回false;
如果(!Character.isUpperCase(token.charAt(0))返回false;
对于(inti=1;i
此函数应涵盖它。每个字符只检查一次,不创建任何对象
public static boolean validate(String token) {
if (token == null || token.length() < 2) return false;
if (!Character.isUpperCase(token.charAt(0)) return false;
for (int i = 1; i < token.length(); i++)
if (Character.isLowerCase(token.charAt(i)) return true;
return false;
公共静态布尔验证(字符串标记){
if(token==null | | token.length()<2)返回false;
如果(!Character.isUpperCase(token.charAt(0))返回false;
对于(inti=1;i
- 长度至少为2个字符
- 第一个字符是 大写的
- 第一个字符后的剩余子字符串包含 至少1个小写字符
私有布尔值IsInProperty(最终字符串标记){
if(token.length()<2)返回false;
如果(!Character.isUpperCase(token.charAt(0))返回false;
对于(inti=1;i
如果您添加了更多标准,则必须修改最后一个条件。- 长度至少为2个字符
- 第一个字符是 大写的
- 第一个字符后的剩余子字符串包含 至少1个小写字符
私有布尔值IsInProperty(最终字符串标记){
if(token.length()<2)返回false;
如果(!Character.isUpperCase(token.charAt(0))返回false;
对于(inti=1;i
如果添加了更多条件,则必须修改最后一个条件。关于:
return token.matches("[A-Z].*[a-z].*");
此正则表达式以大写字母开头,下面至少有一个小写字母,因此满足您的要求。关于:
return token.matches("[A-Z].*[a-z].*");
此正则表达式以大写字母开头,后面至少有一个小写字母,因此满足您的要求。返回标记.matches(“[A-Z].[A-Z]”);返回标记.matches(“[A-Z].[A-Z]”);为什么不尝试使用Str