在Dart中检查字符串的第一个字母是否为大写

6
我想检查Dart语言中字符串的第一个字母是否是大写。我该如何实现?谢谢。

你只是想检查它还是需要了解并采取行动? - flarkmarup
5个回答

12
我能想到的最简单方法是将字符串的第一个字母与其大写形式进行比较。类似这样的方式:

我能想到的最简单方法是将字符串的第一个字母与其大写形式进行比较。类似这样的方式:

bool isUpperCase(String string) {
    if (string == null) {
      return false;
    }
    if (string.isEmpty) {
      return false;
    }
    if (string.trimLeft().isEmpty) {
      return false;
    }
    String firstLetter = string.trimLeft().substring(0, 1);
    if (double.tryParse(firstLetter) != null) {
      return false;
    }
    return firstLetter.toUpperCase() == string.substring(0, 1);      
}

已更新答案,考虑到数字的情况。

@Saed Nabil 也是对的,如果字符串以非字母字符开头(除了数字),此解决方案将返回 true。


1
很好,但我认为如果字符串以数字或任何其他字形而不是字母开头,它将给出错误的答案。 - Saed Nabil
完美。不需要使用任何库。谢谢! - valerybodak
完美。非常完美。感谢您提供如此广泛的答案。我爱你,非常爱你。感谢您的帮助,这将永远受到感激。 - Pro Co

2

如果你还没有使用validators库,你可以使用它。

然后使用这个方法:

isUppercase(String str) → bool 检查字符串str是否为大写

别忘了在pubspec.yaml文件和你的代码中导入依赖项请参阅文档,并且导入'package:validators/validators.dart';

示例代码:

if(isUppercase(value[0])){
  ... do some magic
}

你应该先检查变量的值value是否既非空null,以确保安全。像这样:
if(value != null && value.isNotEmpty && isUppercase(value[0])){
  ... do amazing things
}

1
为什么不使用value.isNotEmpty而不是否定!value.isEmpty呢? - flarkmarup
例如,这会为$返回true。我将其与isAlpha结合使用 - user3808307

1

使用codeUnites验证字符的ASCII码。

添加此扩展名。

extension Case on String{
    // isuppercase
    bool isUpperCase(){
        int ascii = codeUnitAt(0);
        return ascii >= 65 && ascii <= 90;
    }
    // islowercase
    bool isLowerCase(){
        int ascii = codeUnitAt(0);
        return ascii >= 97 && ascii <= 122;
    }
}

像这样使用它

String letter = 'A';
print(letter.isUpperCase()); // true

0
bool isUppercase(String str){
    return str == str.toUpperCase();
  }

这似乎是一种优雅的检查大写字母的方式

String s='Hello';

bool isUpper = isUppercase(s[0]);
print(isUpper);  //true

isUpper = isUppercase(s[1]);
print(isUpper);  //false

0

检查这段代码,它将返回实际的大写字母,否则将返回 null。

void main(){
  var myString = "1s you said";
  var firstCapital = firstCapitalLetter(myString);

  if( firstCapital != null){
    print("First Capital Letter is ${firstCapital}");
  }else{
    print("Not found");
  }
}
String firstCapitalLetter(String myString){

  final allCapitals = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; //string.substring(0, 1).toUpperCase() == string.substring(0, 1) will not work with for ex. numbers;

   if (myString == null) {
      return null;
    }
    if (myString.isEmpty) {
      return null;
    }
    if (myString.trimLeft().isEmpty) {
      return null;
    }

  if( allCapitals.contains(myString[0])){
       return myString[0];
  }else{
       return null;
  }
 }

这是Java语言中Optional类型的典型案例,请查看此库,如果您喜欢函数式风格的代码 optional package


是的,但您可以添加您感兴趣的不同语言。 - Saed Nabil
建议:不要自己处理语言,ABC,诶比尺,让Dart框架为您完成这项工作。 - Haroun Hajem
1
@HarounHajem 请检查验证器包的实现,它使用了 RegExp,例如 RegExp _alpha = new RegExp(r'^[a-zA-Z]+$');。我已经解释了为什么我提出了这个解决方案,其他解决方案在字符串以数字开头时会给出错误的答案。 - Saed Nabil
哦,我以前不知道它使用 A-Z 的正则表达式。那真的很糟糕。=S - Haroun Hajem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接