🧑💻String
Вот полное руководство по основным методам и свойствам типа данных String
в Dart, с примерами использования и рекомендациями, где они могут быть полезны.
Свойства
length
Возвращает количество символов в строке.String text = "Hello, Dart!"; print(text.length); // Вывод: 12
Где использовать: Определение длины строки, например, для валидации длины введённого пароля.
isEmpty
Возвращаетtrue
, если строка пуста (длина 0).String text = ""; print(text.isEmpty); // Вывод: true
Где использовать: Проверка на пустую строку перед выполнением операций с текстом.
isNotEmpty
Возвращаетtrue
, если строка не пуста.String text = "Hello"; print(text.isNotEmpty); // Вывод: true
Где использовать: Используется, когда нужно убедиться, что строка содержит данные, например, перед отправкой формы.
Методы
contains
Проверяет, содержит ли строка указанную подстроку.String text = "Hello, Dart!"; print(text.contains("Dart")); // Вывод: true
Где использовать: Для поиска ключевых слов в тексте.
substring
Возвращает подстроку, начиная с позицииstartIndex
доendIndex
.String text = "Hello, Dart!"; print(text.substring(7, 11)); // Вывод: Dart
Где использовать: Извлечение частей текста, например, имени пользователя из email.
indexOf
Возвращает индекс первого вхождения подстроки.String text = "Hello, Dart!"; print(text.indexOf("Dart")); // Вывод: 7
Где использовать: Поиск позиции подстроки для разделения текста.
lastIndexOf
Возвращает индекс последнего вхождения подстроки.String text = "Dart is fun, and Dart is powerful."; print(text.lastIndexOf("Dart")); // Вывод: 20
Где использовать: Нахождение последнего вхождения для обработки строк.
toLowerCase
иtoUpperCase
Преобразует строку в нижний или верхний регистр.String text = "Hello, Dart!"; print(text.toLowerCase()); // Вывод: hello, dart! print(text.toUpperCase()); // Вывод: HELLO, DART!
Где использовать: Стандартизация регистра, например, для поиска без учёта регистра.
trim
,trimLeft
,trimRight
Удаляют пробелы в начале и/или конце строки.String text = " Dart is awesome! "; print(text.trim()); // Вывод: "Dart is awesome!" print(text.trimLeft()); // Вывод: "Dart is awesome! " print(text.trimRight()); // Вывод: " Dart is awesome!"
Где использовать: Очистка строки от лишних пробелов перед обработкой.
replaceAll
иreplaceFirst
Заменяет все вхождения подстроки или только первое.String text = "Dart is cool. Dart is fast."; print(text.replaceAll("Dart", "Flutter")); // Вывод: Flutter is cool. Flutter is fast. print(text.replaceFirst("Dart", "Flutter")); // Вывод: Flutter is cool. Dart is fast.
Где использовать: Замена слов или символов, например, в шаблонах текста.
split
Разделяет строку по указанному разделителю и возвращает список.String text = "apple,banana,grape"; List<String> fruits = text.split(","); print(fruits); // Вывод: [apple, banana, grape]
Где использовать: Разбиение текста на части, например, CSV-данные.
startsWith
иendsWith
Проверяют, начинается или заканчивается ли строка на указанную подстроку.String text = "Hello, Dart!"; print(text.startsWith("Hello")); // Вывод: true print(text.endsWith("Dart!")); // Вывод: true
Где использовать: Проверка формата текста, например, проверка на конкретное расширение файла.
codeUnitAt
иcodeUnits
Возвращают Unicode код символа или список кодов символов в строке.String text = "Dart"; print(text.codeUnitAt(0)); // Вывод: 68 (код 'D') print(text.codeUnits); // Вывод: [68, 97, 114, 116]
Где использовать: Для работы с Unicode, например, шифрование текста.
compareTo
Сравнивает строки лексикографически.String a = "apple"; String b = "banana"; print(a.compareTo(b)); // Вывод: -1 (a перед b)
Где использовать: Сортировка строк.
padLeft
иpadRight
Добавляют символы слева или справа до указанной ширины.String text = "5"; print(text.padLeft(3, '0')); // Вывод: 005
Где использовать: Форматирование чисел, например, для представления времени в виде
00:05
.replaceAllMapped
Заменяет все вхождения шаблона, используя функцию обратного вызова.String text = "123-456-7890"; print(text.replaceAllMapped(RegExp(r'\d'), (match) => '*')); // Вывод: ***-***-****
Где использовать: Маскирование данных, например, скрытие части телефонного номера.
splitMapJoin
Разделяет строку по шаблону и объединяет результат.String text = "Dart and Flutter"; print(text.splitMapJoin("and", onMatch: (m) => "&", onNonMatch: (n) => n.toUpperCase())); // Вывод: DART & FLUTTER
Где использовать: Для более гибкой замены и обработки текста.
allMatches
иmatchAsPrefix
Возвращают все совпадения или проверяют, начинается ли строка с шаблона.String text = "Dart is a Dart language"; Iterable<Match> matches = RegExp(r'Dart').allMatches(text); for (Match m in matches) { print("Found Dart at: ${m.start}"); } // Вывод: // Found Dart at: 0 // Found Dart at: 11
Где использовать: Поиск всех вхождений подстроки для подсчета или анализа.
Этот пример показывает использование различных методов и свойств String
с TextField
для ввода текста и Text
для отображения результата.
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'String Methods Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: StringMethodsScreen(),
);
}
}
class StringMethodsScreen extends StatefulWidget {
@override
_StringMethodsScreenState createState() => _StringMethodsScreenState();
}
class _StringMethodsScreenState extends State<StringMethodsScreen> {
String _inputText = ''; // Текст из TextField
String _outputText = ''; // Результат применения методов
// Метод для обработки текста
void _processText() {
setState(() {
// Применение различных методов String
_outputText = 'Длина: ${_inputText.length}\n'
'Пустой ли текст: ${_inputText.isEmpty}\n'
'Содержит "Flutter": ${_inputText.contains("Flutter")}\n'
'Подстрока (0, 5): ${_inputText.length >= 5 ? _inputText.substring(0, 5) : "Недостаточно символов"}\n'
'В нижнем регистре: ${_inputText.toLowerCase()}\n'
'В верхнем регистре: ${_inputText.toUpperCase()}\n'
'Без пробелов: ${_inputText.trim()}\n'
'Замена "a" на "@": ${_inputText.replaceAll("a", "@")}\n'
'Список слов: ${_inputText.split(" ")}\n'
'Начинается с "Hello": ${_inputText.startsWith("Hello")}\n'
'Заканчивается на "!": ${_inputText.endsWith("!")}\n'
'Первый символ (ASCII): ${_inputText.isNotEmpty ? _inputText.codeUnitAt(0) : "N/A"}\n';
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('String Methods Demo'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
TextField(
onChanged: (text) {
_inputText = text;
},
decoration: InputDecoration(
labelText: 'Введите текст',
border: OutlineInputBorder(),
),
),
SizedBox(height: 16),
ElevatedButton(
onPressed: _processText,
child: Text('Применить методы String'),
),
SizedBox(height: 16),
Text(
'Результат:',
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
),
SizedBox(height: 8),
Expanded(
child: SingleChildScrollView(
child: Text(
_outputText,
style: TextStyle(fontSize: 16),
),
),
),
],
),
),
);
}
}
Описание кода
_inputText
хранит текст, введённый пользователем._outputText
хранит результаты применения различных методовString
.Метод
_processText()
обрабатывает текст, применяя к нему различные методы, и обновляет состояние.TextField
позволяет вводить текст, который сохраняется в переменной_inputText
.ElevatedButton
вызывает метод_processText()
, который применяет методы и обновляет вывод.Text
иSingleChildScrollView
отображают результат, позволяя прокручивать его, если он выходит за пределы экрана.
Этот код даст полное понимание применения различных методов String
в приложении Flutter.
Last updated