如何在dart中大写字符串的第一个字母?

时间:2015-04-14 13:41:43

标签: dart

如何大写字符串的第一个字符,而不更改任何其他字母的大小写?

例如,“this is a string”应该给出“This is a string”。

31 个答案:

答案 0 :(得分:83)

从dart 2.6版开始,dart支持扩展:

extension StringExtension on String {
    String capitalize() {
      return "${this[0].toUpperCase()}${this.substring(1)}";
    }
}

所以您可以像这样呼叫您的分机:

import "string_extension.dart";

var someCapitalizedString = "someString".capitalize();

答案 1 :(得分:29)

main() {
  String s = 'this is a string';
  print('${s[0].toUpperCase()}${s.substring(1)}');
}

答案 2 :(得分:25)

void main() {
  print(capitalize("this is a string"));
  // displays "This is a string"
}

String capitalize(String s) => s[0].toUpperCase() + s.substring(1);

请参阅在DartPad上运行的此代码段:https://dartpad.dartlang.org/c8ffb8995abe259e9643

或者,您可以使用strings package,请参阅capitalize

答案 3 :(得分:6)

您可以在颤抖中使用此软件包 ReCase 它为您提供了各种大小写转换功能,例如:

  • snake_case
  • dot.case
  • 路径/大小写
  • 参数案例
  • PascalCase
  • 标题案例
  • 标题盒
  • camelCase
  • 判刑案件
  • CONSTANT_CASE

    ReCase sample = new ReCase('hello world');
    
    print(sample.sentenceCase); // Prints 'Hello world'
    

答案 4 :(得分:4)

void allWordsCapitilize (String str) {
    return str.toLowerCase().split(' ').map((word) {
      String leftText = (word.length > 1) ? word.substring(1, word.length) : '';
      return word[0].toUpperCase() + leftText;
    }).join(' ');
}
allWordsCapitilize('THIS IS A TEST'); //This Is A Test

答案 5 :(得分:3)

如Ephenodrom先前所述, 您可以在pubspeck.yaml中添加basic_utils包,并在dart文件中使用它,如下所示:

StringUtils.capitalize("yourString");

单个功能可以接受,但是在较大的操作链中,它变得很尴尬。

Dart language documentation中所述:

doMyOtherStuff(doMyStuff(something.doStuff()).doOtherStuff())

该代码的可读性比可读性差

something.doStuff().doMyStuff().doOtherStuff().doMyOtherStuff()

代码也很难被发现,因为IDE可以在something.doStuff()之后建议doMyStuff(),但是不太可能建议在表达式周围放置doMyOtherStuff(…)。

由于这些原因,我认为您应该为String类型添加一个扩展方法(自dart 2.6起即可!),如下所示:

/// Example : hello => Hello, WORLD => World
extension Capitalized on String {
  String capitalized() => this.substring(0, 1).toUpperCase() + this.substring(1).toLowerCase();
}```

and call it using dot notation:

`'yourString'.capitalized()`

or, if your value can be null, replacing the dot with a '?.' in the invocation:

`myObject.property?.toString()?.capitalized()`

答案 6 :(得分:2)

您可以使用字符串librarie的capitalize()方法,现在在0.1.2版本中可用, 并确保在pubspec.yaml中添加依赖项:

dependencies:
  strings: ^0.1.2

并将其导入到dart文件中:

import 'package:strings/strings.dart';

现在您可以使用具有以下原型的方法:

String capitalize(String string)

示例:

print(capitalize("mark")); => Mark 

答案 7 :(得分:2)

截至 2021 年 3 月 23 日 Flutter 2.0.2

只需使用 yourtext.capitalizeFirst

答案 8 :(得分:2)

奇怪的是,这在飞镖中是不可用的。以下是大写String的扩展名:

extension StringExtension on String {
  String capitalized() {
    if (this.isEmpty) return this;
    return this[0].toUpperCase() + this.substring(1);
  }
}

它首先检查String是否为空,然后将首字母大写并添加其余字母

用法:

import "path/to/extension/string_extension_file_name.dart";

var capitalizedString = '${'alexander'.capitalized()} ${'hamilton, my name is'.capitalized()} ${'alexander'.capitalized()} ${'hamilton'.capitalized()}');
// Print result: "Alexander Hamilton, my name is Alexander Hamilton"

答案 9 :(得分:2)

这是使用String类方法splitMapJoin来在dart中大写字符串的另一种选择:

var str = 'this is a test';
str = str.splitMapJoin(RegExp(r'\w+'),onMatch: (m)=> '${m.group(0)}'.substring(0,1).toUpperCase() +'${m.group(0)}'.substring(1).toLowerCase() ,onNonMatch: (n)=> ' ');
print(str);  // This Is A Test 

答案 10 :(得分:2)

此代码对我有用。

String name = 'amina';    

print(${name[0].toUpperCase()}${name.substring(1).toLowerCase()});

答案 11 :(得分:2)

您还应该检查字符串是空还是空。

String capitalize(String input) {
  if (input == null) {
    throw new ArgumentError("string: $input");
  }
  if (input.length == 0) {
    return input;
  }
  return input[0].toUpperCase() + input.substring(1);
}

答案 12 :(得分:1)

String capitalize(String s) => (s != null && s.length > 1)
    ? s[0].toUpperCase() + s.substring(1)
    : s != null ? s.toUpperCase() : null;

它通过测试:

test('null input', () {
  expect(capitalize(null), null);
});
test('empty input', () {
  expect(capitalize(''), '');
});
test('single char input', () {
  expect(capitalize('a'), 'A');
});
test('crazy input', () {
  expect(capitalize('?a!'), '?a!');
});
test('normal input', () {
  expect(capitalize('take it easy bro!'), 'Take it easy bro!');
});

答案 13 :(得分:1)

超级晚,但我使用,


String title = "some string with no first letter caps";
    
title = title.replaceFirst(title[0], title[0].toUpperCase()); // Some string...

答案 14 :(得分:1)

其他答案中的子字符串解析不考虑语言环境差异。 intl/intl.dart软件包中的toBeginningOfSentenceCase()函数处理基本的句子大小写以及土耳其语和阿塞拜疆语中带点划线的“ i”。

import 'package:intl/intl.dart';
...
String sentence = toBeginningOfSentenceCase('this is a string'); // This is a string

答案 15 :(得分:1)

要检查是否为空和空字符串,还可以使用缩写符号:

  String capitalizeFirstLetter(String s) =>
  (s?.isNotEmpty ?? false) ? '${s[0].toUpperCase()}${s.substring(1)}' : s;

答案 16 :(得分:1)

var orig = "this is a string";
var changed = orig.substring(0, 1).toUpperCase + orig.substring(1)

答案 17 :(得分:1)

您可以使用Text_Tools软件包,使用简单:

https://pub.dev/packages/text_tools

您的代码如下:

//This will print 'This is a string
print(TextTools.toUppercaseFirstLetter(text: 'this is a string'));

答案 18 :(得分:1)

最简单的答案在这里:

首先使用其索引将字符串的第一个字母大写,然后将字符串的其余部分连接起来。

此处的用户名是字符串。

用户名[0] .toUpperCase()+用户名.substring(1);

答案 19 :(得分:1)

使用字符而不是代码单元

如文章 Dart string manipulation done right 中所述(请参阅场景 4),无论何时处理用户输入,都应使用 characters 而不是索引。

// import 'package:characters/characters.dart';

final sentence = 'e\u0301tienne is eating.'; // étienne is eating.
final firstCharacter = sentence.characters.first.toUpperCase();
final otherCharacters = sentence.characters.skip(1);
final capitalized = '$firstCharacter$otherCharacters';
print(capitalized); // Étienne is eating.

在这个特定示例中,即使您使用索引,它仍然可以工作,但养成使用 characters 的习惯仍然是一个好主意。

characters 包是 Flutter 自带的,所以不需要导入。在纯 Dart 项目中,您需要添加导入,但不必向 pubspec.yaml 添加任何内容。

答案 20 :(得分:1)

我使用了 Hannah Stark 的答案,但如果字符串为空,它会使应用程序崩溃,因此这里是带有扩展名的解决方案的改进版本:

new Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisSize: MainAxisSize.max,
          mainAxisAlignment: MainAxisAlignment.end,
          children: <Widget>[
            Center(
              child: FlatButton(
                onPressed: () => _navigateToSignUpScreen(context),
                child: Container(
                  margin: EdgeInsets.fromLTRB(width / 8, 0, width / 8, 20),
                  width: width,
                  height: height / 14,
                  decoration: BoxDecoration(
                    color: const Color(0x59ffffff),
                  ),
                  child: Center(
                    child: Text(
                      "SIGN UP",
                      style: TextStyle(
                        fontFamily: 'Gontserrat',
                        fontSize: 16,
                        color: const Color(0xff000000),
                      ),
                    ),
                  ),
                ),
              ),
            ),
            Center(
              child: FlatButton(
                onPressed: () => _navigateToLoginScreen(context),
                child: Container(
                  margin: EdgeInsets.fromLTRB(width / 8, 0, width / 8, 80),
                  width: width,
                  height: height / 14,
                  decoration: BoxDecoration(
                    color: const Color(0x59ffffff),
                  ),
                  child: Center(
                    child: Text(
                      'LOG IN',
                      style: TextStyle(
                        letterSpacing: 2.0,
                        fontFamily: 'Gontserrat',
                        fontSize: 16,
                        color: const Color(0xff000000),
                      ),
                      textAlign: TextAlign.center,
                    ),
                  ),
                ),
              ),
            ),
          ],
        ),

答案 21 :(得分:0)

extension StringExtension on String {
  String capitalize() {
    return this
        .toLowerCase()
        .split(" ")
        .map((word) => word[0].toUpperCase() + word.substring(1, word.length))
        .join(" ");
  }
}

对于任何感兴趣的人,这应该适用于任何字符串

答案 22 :(得分:0)

你可以使用这个:

extension EasyString on String {
  String toCapitalCase() {
   var lowerCased = this.toLowerCase();
   return lowerCased[0].toUpperCase() + lowerCased.substring(1);
 }
} 

答案 23 :(得分:0)

我使用了不同的实现:

  1. 创建一个类:
import 'package:flutter/services.dart';

class FirstLetterTextFormatter extends TextInputFormatter {
  @override
  TextEditingValue formatEditUpdate(
      TextEditingValue oldValue, TextEditingValue newValue) {
    return TextEditingValue(
      //text: newValue.text?.toUpperCase(),
      text: normaliseName(newValue.text),
      selection: newValue.selection,
    );
  }

  /// Fixes name cases; Capitalizes Each Word.
  String normaliseName(String name) {
    final stringBuffer = StringBuffer();

    var capitalizeNext = true;
    for (final letter in name.toLowerCase().codeUnits) {
      // UTF-16: A-Z => 65-90, a-z => 97-122.
      if (capitalizeNext && letter >= 97 && letter <= 122) {
        stringBuffer.writeCharCode(letter - 32);
        capitalizeNext = false;
      } else {
        // UTF-16: 32 == space, 46 == period
        if (letter == 32 || letter == 46) capitalizeNext = true;
        stringBuffer.writeCharCode(letter);
      }
    }

    return stringBuffer.toString();
  }
}

然后您将该类导入到您需要的任何页面中,例如在 TextField 的 inputFormatters 属性中,只需像这样调用上面的小部件:


TextField(
inputformatters: [FirstLetterTextFormatter()]),
),

答案 24 :(得分:0)

我发现解决此问题的另一种不健康的方法是

String myName = "shahzad";

print(myName.substring(0,1).toUpperCase() + myName.substring(1));

这将产生相同的效果,但是这样做的方式非常肮脏。

答案 25 :(得分:0)

在这里分享我的答案

void main() {
  var data = allWordsCapitilize(" hi ram good day");
  print(data);
}

String allWordsCapitilize(String value) {
  var result = value[0].toUpperCase();
  for (int i = 1; i < value.length; i++) {
    if (value[i - 1] == " ") {
      result = result + value[i].toUpperCase();
    } else {
      result = result + value[i];
    }
  }
  return result;
}

答案 26 :(得分:0)

这是我使用dart String方法的答案。

const [products, setProduct] = useState(data);

  const initialValues = {
    customer_id: null,
    reason: "",
    products
  };

// an example of the events
 <InputAdornment position="start">
   <IconButton
     onClick={() => {
              decrement(
                        idx,
                        "returnValue" // the key value
                        );
              }}
     >
       <RemoveCircleOutlineIcon />
       </IconButton>
  </InputAdornment>

答案 27 :(得分:0)

String fullNameString =
    txtControllerName.value.text.trim().substring(0, 1).toUpperCase() +
        txtControllerName.value.text.trim().substring(1).toLowerCase();

答案 28 :(得分:0)

有一个utils软件包涵盖了此功能。它具有一些用于操作字符串的更出色的方法。

通过:

安装
dependencies:
  basic_utils: ^1.2.0

用法:

String capitalized = StringUtils.capitalize("helloworld");

Github:

https://github.com/Ephenodrom/Dart-Basic-Utils

答案 29 :(得分:0)

一些更流行的其他答案似乎无法处理null''。我希望不必在客户端代码中处理这些情况,无论如何我都只想返回String-即使在null的情况下这意味着一个空的。

String upperCaseFirst(String s) => (s??'').length<1 ? '' : s[0].toUpperCase() + s.substring(1)

答案 30 :(得分:-1)

尝试使用此代码将 Dart 中任何字符串的首字母大写

Example: hiii how are you

    Code:
     String str="hiii how are you";
     Text( '${str[0].toUpperCase()}${str.substring(1)}',)`

Output: Hiii how are you