🧑‍💻String

Вот полное руководство по основным методам и свойствам типа данных String в Dart, с примерами использования и рекомендациями, где они могут быть полезны.

Свойства

  1. length Возвращает количество символов в строке.

    String text = "Hello, Dart!";
    print(text.length); // Вывод: 12

    Где использовать: Определение длины строки, например, для валидации длины введённого пароля.

  2. isEmpty Возвращает true, если строка пуста (длина 0).

    String text = "";
    print(text.isEmpty); // Вывод: true

    Где использовать: Проверка на пустую строку перед выполнением операций с текстом.

  3. isNotEmpty Возвращает true, если строка не пуста.

    String text = "Hello";
    print(text.isNotEmpty); // Вывод: true

    Где использовать: Используется, когда нужно убедиться, что строка содержит данные, например, перед отправкой формы.

Методы

  1. contains Проверяет, содержит ли строка указанную подстроку.

    String text = "Hello, Dart!";
    print(text.contains("Dart")); // Вывод: true

    Где использовать: Для поиска ключевых слов в тексте.

  2. substring Возвращает подстроку, начиная с позиции startIndex до endIndex.

    String text = "Hello, Dart!";
    print(text.substring(7, 11)); // Вывод: Dart

    Где использовать: Извлечение частей текста, например, имени пользователя из email.

  3. indexOf Возвращает индекс первого вхождения подстроки.

    String text = "Hello, Dart!";
    print(text.indexOf("Dart")); // Вывод: 7

    Где использовать: Поиск позиции подстроки для разделения текста.

  4. lastIndexOf Возвращает индекс последнего вхождения подстроки.

    String text = "Dart is fun, and Dart is powerful.";
    print(text.lastIndexOf("Dart")); // Вывод: 20

    Где использовать: Нахождение последнего вхождения для обработки строк.

  5. toLowerCase и toUpperCase Преобразует строку в нижний или верхний регистр.

    String text = "Hello, Dart!";
    print(text.toLowerCase()); // Вывод: hello, dart!
    print(text.toUpperCase()); // Вывод: HELLO, DART!

    Где использовать: Стандартизация регистра, например, для поиска без учёта регистра.

  6. 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!"

    Где использовать: Очистка строки от лишних пробелов перед обработкой.

  7. 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.

    Где использовать: Замена слов или символов, например, в шаблонах текста.

  8. split Разделяет строку по указанному разделителю и возвращает список.

    String text = "apple,banana,grape";
    List<String> fruits = text.split(",");
    print(fruits); // Вывод: [apple, banana, grape]

    Где использовать: Разбиение текста на части, например, CSV-данные.

  9. startsWith и endsWith Проверяют, начинается или заканчивается ли строка на указанную подстроку.

    String text = "Hello, Dart!";
    print(text.startsWith("Hello")); // Вывод: true
    print(text.endsWith("Dart!"));   // Вывод: true

    Где использовать: Проверка формата текста, например, проверка на конкретное расширение файла.

  10. codeUnitAt и codeUnits Возвращают Unicode код символа или список кодов символов в строке.

    String text = "Dart";
    print(text.codeUnitAt(0)); // Вывод: 68 (код 'D')
    print(text.codeUnits);     // Вывод: [68, 97, 114, 116]

    Где использовать: Для работы с Unicode, например, шифрование текста.

  11. compareTo Сравнивает строки лексикографически.

    String a = "apple";
    String b = "banana";
    print(a.compareTo(b)); // Вывод: -1 (a перед b)

    Где использовать: Сортировка строк.

  12. padLeft и padRight Добавляют символы слева или справа до указанной ширины.

    String text = "5";
    print(text.padLeft(3, '0')); // Вывод: 005

    Где использовать: Форматирование чисел, например, для представления времени в виде 00:05.

  13. replaceAllMapped Заменяет все вхождения шаблона, используя функцию обратного вызова.

    String text = "123-456-7890";
    print(text.replaceAllMapped(RegExp(r'\d'), (match) => '*'));
    // Вывод: ***-***-****

    Где использовать: Маскирование данных, например, скрытие части телефонного номера.

  14. splitMapJoin Разделяет строку по шаблону и объединяет результат.

    String text = "Dart and Flutter";
    print(text.splitMapJoin("and", onMatch: (m) => "&", onNonMatch: (n) => n.toUpperCase()));
    // Вывод: DART & FLUTTER

    Где использовать: Для более гибкой замены и обработки текста.

  15. 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