145

如何在不更改任何其他字母的情况下将字符串的第一个字符大写?

例如,“这是一个字符串”应该给出“这是一个字符串”。

4

32 回答 32

194

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

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

所以你可以像这样调用你的分机:

import "string_extension.dart";

var someCapitalizedString = "someString".capitalize();
于 2020-03-04T14:11:27.543 回答
179

将其复制到某处:

extension StringCasingExtension on String {
  String toCapitalized() => length > 0 ?'${this[0].toUpperCase()}${substring(1).toLowerCase()}':'';
  String toTitleCase() => replaceAll(RegExp(' +'), ' ').split(' ').map((str) => str.toCapitalized()).join(' ');
}

用法:

// import StringCasingExtension

final helloWorld = 'hello world'.toCapitalized(); // 'Hello world'
final helloWorld = 'hello world'.toUpperCase(); // 'HELLO WORLD'
final helloWorldCap = 'hello world'.toTitleCase(); // 'Hello World'
于 2015-04-14T13:47:30.677 回答
103

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

import 'package:intl/intl.dart' show toBeginningOfSentenceCase;

print(toBeginningOfSentenceCase('this is a string'));
于 2019-05-10T21:48:07.330 回答
62
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

于 2015-04-14T13:48:05.093 回答
17

有一个 utils 包涵盖了这个功能。它有一些更好的字符串操作方法。

安装它:

dependencies:
  basic_utils: ^1.2.0

用法 :

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

GitHub:

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

于 2019-06-19T14:01:42.680 回答
10

你可以在Flutter ReCase中使用这个包, 它为你提供了各种大小写转换功能,例如:

  • 蛇案例
  • 点格
  • 路径/案例
  • 参数案例
  • 帕斯卡案例
  • 标题案例
  • 标题案例
  • 骆驼香烟盒
  • 判刑案例
  • CONSTANT_CASE

    ReCase sample = new ReCase('hello world');
    
    print(sample.sentenceCase); // Prints 'Hello world'
    
于 2020-03-24T17:43:57.137 回答
7

超级晚了,但我用,


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

于 2021-08-01T14:38:17.490 回答
6
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
于 2020-01-15T01:22:38.767 回答
6

正如 Ephenodrom 之前提到的,您可以在 pubspeck.yaml 中添加 basic_utils 包,并在 dart 文件中使用它,如下所示:

StringUtils.capitalize("yourString");

这对于单个函数是可以接受的,但在更大的操作链中,它会变得很尴尬。

Dart 语言文档中所述:

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

该代码的可读性远低于

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

代码也更不容易被发现,因为 IDE 可以doMyStuff()在 之后提出建议something.doStuff(),但不太可能建议将doMyOtherStuff(…)表达式放在后面。

由于这些原因,我认为您应该为 String 类型添加一个扩展方法(从 dart 2.6 开始就可以这样做!),如下所示:

/// Capitalize the given string [s]
/// Example : hello => Hello, WORLD => World
extension Capitalized on String {
  String capitalized() => this.substring(0, 1).toUpperCase() + this.substring(1).toLowerCase();
}

并使用点表示法调用它:

'yourString'.capitalized()

或者,如果您的值可以为空,则将点替换为“?。” 在调用中:

myObject.property?.toString()?.capitalized()
于 2020-03-09T15:28:42.667 回答
4
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!');
});
于 2019-10-01T10:24:17.840 回答
4

要检查 null 和空字符串情况,也使用短符号:

  String capitalizeFirstLetter(String s) =>
  (s?.isNotEmpty ?? false) ? '${s[0].toUpperCase()}${s.substring(1)}' : s;
于 2018-12-03T17:05:37.810 回答
4

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

dependencies:
  strings: ^0.1.2

并将其导入飞镖文件:

import 'package:strings/strings.dart';

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

String capitalize(String string)

例子 :

print(capitalize("mark")); => Mark 
于 2020-05-27T15:58:33.323 回答
3

这是使用 String 类 Method 将 dart 中的字符串大写的另一种替代方法splitMapJoin

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 
于 2020-05-27T08:36:15.770 回答
3

奇怪的是,这在 dart 中是不可用的。以下是大写 a 的扩展String

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

它首先检查 aString不为空,然后将第一个字母大写并添加其余字母

用法:

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"
于 2020-08-13T20:11:44.277 回答
3

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

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);
}
于 2017-07-12T01:05:38.397 回答
2

这段代码对我有用。

String name = 'amina';    

print(${name[0].toUpperCase()}${name.substring(1).toLowerCase()});
于 2020-03-30T23:35:16.383 回答
2

使用字符而不是代码单元

正如文章Dart 字符串操作正确(参见场景 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.

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

于 2020-12-25T02:41:39.703 回答
1
var orig = "this is a string";
var changed = orig.substring(0, 1).toUpperCase + orig.substring(1)
于 2015-04-14T13:51:40.577 回答
1

一些更受欢迎的其他答案似乎无法处理nulland ''。我宁愿不必在客户端代码中处理这些情况,String无论如何我只想要一个作为回报 - 即使这意味着在null.

String upperCaseFirst(String s) => (s??'').length<1 ? '' : s[0].toUpperCase() + s.substring(1)
于 2019-09-06T19:17:03.557 回答
1
extension StringExtension on String {
  String capitalize() {
    return this
        .toLowerCase()
        .split(" ")
        .map((word) => word[0].toUpperCase() + word.substring(1, word.length))
        .join(" ");
  }
}

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

于 2021-08-07T10:43:24.413 回答
1

最简单的答案在这里:

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

这里的用户名是字符串。

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

于 2020-10-27T06:56:47.883 回答
1

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

extension StringExtension on String {
  String capitalize() {
    if(this.length > 0) {
      return "${this[0].toUpperCase()}${this.substring(1)}";
    }
    return "";
  }
}
于 2020-12-22T12:10:57.267 回答
1

可以使用Text_Tools包,使用简单:

https://pub.dev/packages/text_tools

您的代码将是这样的:

//This will print 'This is a string
print(TextTools.toUppercaseFirstLetter(text: 'this is a string'));
于 2020-10-12T09:48:45.140 回答
0

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

String name = "big";
String getFirstLetter = name.substring(0, 1);    
String capitalizedFirstLetter =
      name.replaceRange(0, 1, getFirstLetter.toUpperCase());  
print(capitalizedFirstLetter);
于 2020-09-13T13:23:33.333 回答
0
String fullNameString =
    txtControllerName.value.text.trim().substring(0, 1).toUpperCase() +
        txtControllerName.value.text.trim().substring(1).toLowerCase();
于 2020-08-02T05:01:28.327 回答
0

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

String myName = "shahzad";

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

这将产生相同的效果,但这样做很肮脏。

于 2020-11-20T14:19:45.537 回答
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;
}
于 2020-09-20T17:57:12.227 回答
0

你可以使用这个:

extension EasyString on String {
  String toCapitalCase() {
   var lowerCased = this.toLowerCase();
   return lowerCased[0].toUpperCase() + lowerCased.substring(1);
 }
} 
于 2021-06-09T04:22:14.993 回答
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()]),
),

于 2021-03-24T20:29:20.427 回答
-1

截至 2021 年 3 月 23 日 Flutter 2.0.2

只需使用yourtext.capitalizeFirst

于 2021-03-23T03:22:17.513 回答
-2

final helloWorld = 'hello world'.toUpperCase(); 文本(你好世界);

于 2021-09-30T07:58:06.997 回答
-2

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

Example: hiii how are you

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

Output: Hiii how are you
于 2021-05-21T14:24:08.243 回答