Як написати великі літери першого символу рядка, не змінюючи регістр будь-якої іншої літери?
Наприклад, "це рядок" має давати "Це рядок".
Відповіді:
Починаючи з версії 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();
if (isEmpty) return this
як перший рядок.
if (this == null || this == "") return "";
Скопіюйте це десь:
extension CapExtension on String {
String get inCaps => '${this[0].toUpperCase()}${this.substring(1)}';
String get allInCaps => this.toUpperCase();
String get capitalizeFirstofEach => this.split(" ").map((str) => str.capitalize).join(" ");
}
Використання:
final helloWorld = 'hello world'.inCaps; // 'Hello world'
final helloWorld = 'hello world'.allInCaps; // 'HELLO WORLD'
final helloWorld = 'hello world'.capitalizeFirstofEach; // 'Hello World'
Стара відповідь:
main() {
String s = 'this is a string';
print('${s[0].toUpperCase()}${s.substring(1)}');
}
str.capitalize
це не визначене . Отже, ви використовуєтеstr.inCaps
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();
у випадку, якщо для початку рядок має великі регістри.
Синтаксичний розбір підрядків в інших відповідях не враховує розбіжностей мови. Функція toBeginningOfSentenceCase () у intl/intl.dart
пакеті обробляє основний регістр речень та пунктирне "i" турецькою та азербайджанською мовами.
import 'package:intl/intl.dart';
...
String sentence = toBeginningOfSentenceCase('this is a string'); // This is a string
Існує пакет utils, який охоплює цю функцію. У нього є ще кілька приємних методів роботи з рядками.
Встановіть його за допомогою:
dependencies:
basic_utils: ^1.2.0
Використання:
String capitalized = StringUtils.capitalize("helloworld");
Github:
Ви можете використовувати цей пакет у flutter ReCase. Він надає вам різні функції перетворення регістрів, такі як:
CONSTANT_CASE
ReCase sample = new ReCase('hello world');
print(sample.sentenceCase); // Prints 'Hello world'
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
Як згадувалося раніше Ephenodrom, ви можете додати пакет basic_utils у свій pubspeck.yaml і використовувати його у файлах дротиків, як це:
StringUtils.capitalize("yourString");
Це прийнятно для однієї функції, але при більшому ланцюжку операцій стає незручно.
Як пояснюється в мовній документації Dart :
doMyOtherStuff(doMyStuff(something.doStuff()).doOtherStuff())
Цей код набагато менш читабельний, ніж:
something.doStuff().doMyStuff().doOtherStuff().doMyOtherStuff()
Код також є набагато менш відкритим, оскільки середовище розробки може запропонувати 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()`
Ви можете скористатися методом 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 name = 'amina';
print(${name[0].toUpperCase()}${name.substring(1).toLowerCase()});
Це ще одна альтернатива використання великих літер у рядках дротиків за допомогою методу класу String 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
Дивно, але це не доступно в дротиках для початку. Нижче наведено розширення для написання великих літер 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"
var orig = "this is a string";
var changed = orig.substring(0, 1).toUpperCase + orig.substring(1)
Деякі з найбільш популярних інших відповідей, здається, не обробляють 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 () + username.substring (1);
String fullNameString =
txtControllerName.value.text.trim().substring(0, 1).toUpperCase() +
txtControllerName.value.text.trim().substring(1).toLowerCase();
Цим ділюсь з моєю відповіддю
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));
це дасть той самий ефект, але це досить брудний спосіб зробити це.
Я використовувала відповідь Ханни Старк, але вона виводить програму з ладу, якщо рядок порожній, тому ось вдосконалена версія рішення з розширенням:
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
.
Пакет символів поставляється з Flutter, тому немає необхідності в імпорті. У чистому проекті Dart вам потрібно додати імпорт, але вам не потрібно нічого додавати до pubspec.yaml.
return "${this[0].toUpperCase()}${this.substring(1).toLowerCase()}";
. Якщо це не так, він правильно напише великі літери "це", але не "ЦЕ".