如何在飞镖中将字符串的第一个字母大写?
How to capitalize the first letter of a string in dart?
如何将字符串的第一个字符大写,同时不改变任何其他字母的大小写?
例如"this is a string"应该给"This is a string".
将此复制到某处:
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'
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
var orig = "this is a string";
var changed = orig.substring(0, 1).toUpperCase + orig.substring(1)
您还应该检查字符串是否为 null 或空。
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);
}
检查 null 和空字符串的情况,也使用短符号:
String capitalizeFirstLetter(String s) =>
(s?.isNotEmpty ?? false) ? '${s[0].toUpperCase()}${s.substring(1)}' : s;
其他答案中的子字符串解析不考虑语言环境差异。
intl/intl.dart
包中的 toBeginningOfSentenceCase() 函数处理土耳其语和阿塞拜疆语中的基本 sentence-casing 和带点的“i”。
import 'package:intl/intl.dart' show toBeginningOfSentenceCase;
print(toBeginningOfSentenceCase('this is a string'));
有一个包含此功能的实用程序包。它有一些更好的字符串操作方法。
安装:
dependencies:
basic_utils: ^1.2.0
用法:
String capitalized = StringUtils.capitalize("helloworld");
Github:
一些更受欢迎的其他答案似乎无法处理 null
和 ''
。我宁愿不必在客户端代码中处理这些情况,我只想在 return 中有一个 String
无论如何 - 即使这意味着在 null
的情况下是一个空的 null
.
String upperCaseFirst(String s) => (s??'').length<1 ? '' : s[0].toUpperCase() + s.substring(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!');
});
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
从 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();
正如 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 开始这样做!)像这样:
/// 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()
你可以在flutter中使用这个包
ReCase
它为您提供各种大小写转换功能,例如:
- snake_case
- dot.case
- path/case
- param-case
- PascalCase
- Header-Case
- 标题大小写
- 驼峰式
- 句子大小写
CONSTANT_CASE
ReCase sample = new ReCase('hello world');
print(sample.sentenceCase); // Prints 'Hello world'
这段代码对我有用。
String name = 'amina';
print(${name[0].toUpperCase()}${name.substring(1).toLowerCase()});
这是在 dart 中使用字符串 class 方法将字符串大写的另一种方法 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
你可以使用字符串库的 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
String fullNameString =
txtControllerName.value.text.trim().substring(0, 1).toUpperCase() +
txtControllerName.value.text.trim().substring(1).toLowerCase();
奇怪的是,这在开始时在 dart 中不可用。下面是大写 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"
这是我使用 dart String 方法的答案。
String name = "big";
String getFirstLetter = name.substring(0, 1);
String capitalizedFirstLetter =
name.replaceRange(0, 1, getFirstLetter.toUpperCase());
print(capitalizedFirstLetter);
特此分享我的回答
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;
}
可以使用Text_Tools包,使用简单:
https://pub.dev/packages/text_tools
你的代码应该是这样的:
//This will print 'This is a string
print(TextTools.toUppercaseFirstLetter(text: 'this is a string'));
最简单的答案在这里:
首先使用索引将字符串的第一个字母变为大写,然后连接字符串的其余部分。
这里的用户名是字符串。
用户名[0].toUpperCase() + username.substring(1);
我发现解决这个问题的另一种不健康的方法是
String myName = "shahzad";
print(myName.substring(0,1).toUpperCase() + myName.substring(1));
这会产生相同的效果,但这样做很肮脏。
我使用了 Hannah Stark 的答案,但如果字符串为空,它会使应用程序崩溃,所以这里是带有扩展名的解决方案的改进版本:
extension StringExtension on String {
String capitalize() {
if(this.length > 0) {
return "${this[0].toUpperCase()}${this.substring(1)}";
}
return "";
}
}
使用字符而不是代码单位
如文章 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.
添加任何内容
截至 2021 年 3 月 23 日 Flutter 2.0.2
只需使用yourtext.capitalizeFirst
我使用了不同的实现:
- 创建 class:
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();
}
}
然后您将 class 导入您需要的任何页面,例如在 TextField 的 inputFormatters 属性 中,只需像这样调用上面的小部件:
TextField(
inputformatters: [FirstLetterTextFormatter()]),
),
尝试使用此代码将 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
你可以使用这个:
extension EasyString on String {
String toCapitalCase() {
var lowerCased = this.toLowerCase();
return lowerCased[0].toUpperCase() + lowerCased.substring(1);
}
}
超级晚了,不过我用了,
String title = "some string with no first letter caps";
title = title.replaceFirst(title[0], title[0].toUpperCase()); // Some string with no...
extension StringExtension on String {
String capitalize() {
return this
.toLowerCase()
.split(" ")
.map((word) => word[0].toUpperCase() + word.substring(1, word.length))
.join(" ");
}
}
对于任何感兴趣的人,这应该适用于任何字符串
最终helloWorld = 'hello world'.toUpperCase();
文本(你好世界);
在检查范围内。
Dart >2.16.1
的惯用语
作为函数
String capitalize(String str) =>
str.isNotEmpty
? str[0].toUpperCase() + str.substring(1)
: str;
作为扩展
extension StringExtension on String {
String get capitalize =>
isNotEmpty
? this[0].toUpperCase() + substring(1)
: this;
}
如何将字符串的第一个字符大写,同时不改变任何其他字母的大小写?
例如"this is a string"应该给"This is a string".
将此复制到某处:
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'
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
var orig = "this is a string";
var changed = orig.substring(0, 1).toUpperCase + orig.substring(1)
您还应该检查字符串是否为 null 或空。
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);
}
检查 null 和空字符串的情况,也使用短符号:
String capitalizeFirstLetter(String s) =>
(s?.isNotEmpty ?? false) ? '${s[0].toUpperCase()}${s.substring(1)}' : s;
其他答案中的子字符串解析不考虑语言环境差异。
intl/intl.dart
包中的 toBeginningOfSentenceCase() 函数处理土耳其语和阿塞拜疆语中的基本 sentence-casing 和带点的“i”。
import 'package:intl/intl.dart' show toBeginningOfSentenceCase;
print(toBeginningOfSentenceCase('this is a string'));
有一个包含此功能的实用程序包。它有一些更好的字符串操作方法。
安装:
dependencies:
basic_utils: ^1.2.0
用法:
String capitalized = StringUtils.capitalize("helloworld");
Github:
一些更受欢迎的其他答案似乎无法处理 null
和 ''
。我宁愿不必在客户端代码中处理这些情况,我只想在 return 中有一个 String
无论如何 - 即使这意味着在 null
的情况下是一个空的 null
.
String upperCaseFirst(String s) => (s??'').length<1 ? '' : s[0].toUpperCase() + s.substring(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!');
});
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
从 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();
正如 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 开始这样做!)像这样:
/// 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()
你可以在flutter中使用这个包 ReCase 它为您提供各种大小写转换功能,例如:
- snake_case
- dot.case
- path/case
- param-case
- PascalCase
- Header-Case
- 标题大小写
- 驼峰式
- 句子大小写
CONSTANT_CASE
ReCase sample = new ReCase('hello world'); print(sample.sentenceCase); // Prints 'Hello world'
这段代码对我有用。
String name = 'amina';
print(${name[0].toUpperCase()}${name.substring(1).toLowerCase()});
这是在 dart 中使用字符串 class 方法将字符串大写的另一种方法 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
你可以使用字符串库的 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
String fullNameString =
txtControllerName.value.text.trim().substring(0, 1).toUpperCase() +
txtControllerName.value.text.trim().substring(1).toLowerCase();
奇怪的是,这在开始时在 dart 中不可用。下面是大写 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"
这是我使用 dart String 方法的答案。
String name = "big";
String getFirstLetter = name.substring(0, 1);
String capitalizedFirstLetter =
name.replaceRange(0, 1, getFirstLetter.toUpperCase());
print(capitalizedFirstLetter);
特此分享我的回答
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;
}
可以使用Text_Tools包,使用简单:
https://pub.dev/packages/text_tools
你的代码应该是这样的:
//This will print 'This is a string
print(TextTools.toUppercaseFirstLetter(text: 'this is a string'));
最简单的答案在这里:
首先使用索引将字符串的第一个字母变为大写,然后连接字符串的其余部分。
这里的用户名是字符串。
用户名[0].toUpperCase() + username.substring(1);
我发现解决这个问题的另一种不健康的方法是
String myName = "shahzad";
print(myName.substring(0,1).toUpperCase() + myName.substring(1));
这会产生相同的效果,但这样做很肮脏。
我使用了 Hannah Stark 的答案,但如果字符串为空,它会使应用程序崩溃,所以这里是带有扩展名的解决方案的改进版本:
extension StringExtension on String {
String capitalize() {
if(this.length > 0) {
return "${this[0].toUpperCase()}${this.substring(1)}";
}
return "";
}
}
使用字符而不是代码单位
如文章 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.
添加任何内容截至 2021 年 3 月 23 日 Flutter 2.0.2
只需使用yourtext.capitalizeFirst
我使用了不同的实现:
- 创建 class:
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();
}
}
然后您将 class 导入您需要的任何页面,例如在 TextField 的 inputFormatters 属性 中,只需像这样调用上面的小部件:
TextField(
inputformatters: [FirstLetterTextFormatter()]),
),
尝试使用此代码将 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
你可以使用这个:
extension EasyString on String {
String toCapitalCase() {
var lowerCased = this.toLowerCase();
return lowerCased[0].toUpperCase() + lowerCased.substring(1);
}
}
超级晚了,不过我用了,
String title = "some string with no first letter caps";
title = title.replaceFirst(title[0], title[0].toUpperCase()); // Some string with no...
extension StringExtension on String {
String capitalize() {
return this
.toLowerCase()
.split(" ")
.map((word) => word[0].toUpperCase() + word.substring(1, word.length))
.join(" ");
}
}
对于任何感兴趣的人,这应该适用于任何字符串
最终helloWorld = 'hello world'.toUpperCase(); 文本(你好世界);
在检查范围内。
Dart >2.16.1
作为函数
String capitalize(String str) =>
str.isNotEmpty
? str[0].toUpperCase() + str.substring(1)
: str;
作为扩展
extension StringExtension on String {
String get capitalize =>
isNotEmpty
? this[0].toUpperCase() + substring(1)
: this;
}