Как сделать первый символ строки заглавной, не меняя регистр других букв?
Например, «это строка» должно отображаться «Это строка».
Как сделать первый символ строки заглавной, не меняя регистр других букв?
Например, «это строка» должно отображаться «Это строка».
Начиная с версии 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();
return "${this[0].toUpperCase()}${this.substring(1).toLowerCase()}";
. В противном случае он будет правильно использовать заглавные буквы «это», но не «ЭТО».
- person Luciano Rodríguez; 21.05.2020
if (isEmpty) return this
в качестве первой строки.
- person Venkat D.; 12.08.2020
if (this == null || this == "") return "";
- person Maciej; 17.11.2020
Скопируйте это где-нибудь:
extension CapExtension on String {
String get inCaps => this.length > 0 ?'${this[0].toUpperCase()}${this.substring(1)}':'';
String get allInCaps => this.toUpperCase();
String get capitalizeFirstofEach => this.replaceAll(RegExp(' +'), ' ').split(" ").map((str) => str.inCaps).join(" ");
}
Использование:
final helloWorld = 'hello world'.inCaps; // 'Hello world'
final helloWorld = 'hello world'.allInCaps; // 'HELLO WORLD'
final helloWorldCap = 'hello world'.capitalizeFirstofEach; // 'Hello World'
Старый ответ:
main() {
String s = 'this is a string';
print('${s[0].toUpperCase()}${s.substring(1)}');
}
str.capitalize
не определено. Итак, вы используете str.inCaps
- person Ashan; 17.09.2020
Разбор подстроки в других ответах не учитывает различия языковых стандартов. Функция toBeginningOfSentenceCase () в пакете intl/intl.dart
обрабатывает базовый регистр предложений и пунктирная буква «i» в турецком и азербайджанском языках.
import 'package:intl/intl.dart';
...
String sentence = toBeginningOfSentenceCase('this is a string'); // This is a string
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
В качестве альтернативы вы можете использовать пакет строк, см. использовать заглавные буквы.
s[0].toUpperCase() + s.substring(1).toLowerCase();
в случае, если строка начинается с верхнего регистра.
- person TomTom101; 25.01.2020
Есть пакет утилит, который охватывает эту функцию. В нем есть еще несколько хороших методов для работы со строками.
Установите его с помощью:
dependencies:
basic_utils: ^1.2.0
Использование :
String capitalized = StringUtils.capitalize("helloworld");
Github:
https://github.com/Ephenodrom/Dart-Basic-Utils
Вы можете использовать этот пакет во флаттере ReCase. Он предоставляет вам различные функции преобразования регистра, например:
CONSTANT_CASE
ReCase sample = new ReCase('hello world');
print(sample.sentenceCase); // Prints 'Hello world'
String mockText = 'This is-Some_sampleText. YouDig?';
- person WillHaslett; 24.02.2021
Чтобы проверить наличие пустых и пустых строк, также используя короткие обозначения:
String capitalizeFirstLetter(String s) =>
(s?.isNotEmpty ?? false) ? '${s[0].toUpperCase()}${s.substring(1)}' : s;
null
.
- person Giraldi; 12.12.2018
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!');
});
вы можете использовать метод capitalize () библиотеки строк, теперь он доступен в версии 0.1.2, и обязательно добавьте зависимость в pubspec.yaml:
dependencies:
strings: ^0.1.2
и импортируйте его в файл дротика:
import 'package:strings/strings.dart';
и теперь вы можете использовать метод, имеющий следующий прототип:
String capitalize(String string)
Пример :
print(capitalize("mark")); => Mark
Вы также должны проверить, является ли строка пустой или пустой.
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);
}
Как упоминалось ранее Ephenodrom, вы можете добавить пакет basic_utils в свой pubspeck.yaml и использовать его в своих файлах dart следующим образом:
StringUtils.capitalize("yourString");
Это приемлемо для одной функции, но в более крупной цепочке операций становится неудобно.
Как объясняется в Документация по языку Dart:
doMyOtherStuff(doMyStuff(something.doStuff()).doOtherStuff())
Этот код гораздо менее читабелен, чем:
something.doStuff().doMyStuff().doOtherStuff().doMyOtherStuff()
Код также намного труднее обнаружить, потому что IDE может предложить doMyStuff () после something.doStuff ()., Но вряд ли предложит поместить 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()`
Странно, что в дротике этого нет. Ниже приведено расширение для использования 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"
Этот код у меня работает.
String name = 'amina';
print(${name[0].toUpperCase()}${name.substring(1).toLowerCase()});
Это еще одна альтернатива заглавным буквам Strings in dart с использованием String class Method _ 1_:
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
По состоянию на 23.03.2021 Flutter 2.0.2
Просто используйте yourtext.capitalizeFirst
Некоторые из наиболее популярных ответов, похоже, не обрабатывают null
и ''
. Я предпочитаю не иметь дело с этими ситуациями в клиентском коде, я просто хочу взамен String
, несмотря ни на что - даже если это означает пустой в случае null
.
String upperCaseFirst(String s) => (s??'').length<1 ? '' : s[0].toUpperCase() + s.substring(1)
Вы можете использовать пакет 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 () + имя пользователя.substring (1);
Я использовал ответ Ханны Старк, но он приводит к сбою приложения, если строка пуста, поэтому вот улучшенная версия решения с расширением:
extension StringExtension on String {
String capitalize() {
if(this.length > 0) {
return "${this[0].toUpperCase()}${this.substring(1)}";
}
return "";
}
}
Как описано в статье, Манипуляции со строкой 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
.
Пакет characters поставляется с Flutter, поэтому импорт не требуется. В чистом проекте Dart вам нужно добавить импорт, но вам не нужно ничего добавлять в pubspec.yaml.
characters
?
- person Iván Yoed; 26.05.2021
Вот мой ответ с использованием методов 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;
}
Еще один нездоровый способ решения этой проблемы, который я нашел, - это
String myName = "shahzad";
print(myName.substring(0,1).toUpperCase() + myName.substring(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();
}
}
Затем вы импортируете класс на любую нужную вам страницу, например, в свойстве inputFormatters TextField, просто вызовите виджет, указанный выше, следующим образом:
TextField(
inputformatters: [FirstLetterTextFormatter()]),
),
Вы можете использовать это:
extension EasyString on String {
String toCapitalCase() {
var lowerCased = this.toLowerCase();
return lowerCased[0].toUpperCase() + lowerCased.substring(1);
}
}
Попробуйте использовать этот код для использования заглавной буквы в первой букве любой строки в 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