Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:确定字符串是否满足多个条件的有效方法?_Java_String_Algorithm - Fatal编程技术网

Java:确定字符串是否满足多个条件的有效方法?

Java:确定字符串是否满足多个条件的有效方法?,java,string,algorithm,Java,String,Algorithm,我想找到一种有效的方法(不扫描字符串10000次,或创建大量中间字符串以保存临时结果,或字符串破坏等)来编写一个接受字符串并确定其是否满足以下条件的方法: 长度至少为2个字符 第一个字符是大写的 第一个字符后的剩余子字符串至少包含1个小写字符 以下是我迄今为止的尝试: private boolean isInProperForm(final String token) { if(token.length() < 2) return false; cha

我想找到一种有效的方法(不扫描字符串10000次,或创建大量中间字符串以保存临时结果,或字符串破坏等)来编写一个接受字符串并确定其是否满足以下条件的方法:

  • 长度至少为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