FLUTTER ECOSYSTEM

Chinmay-KB/stringr

適用於 Dart/Flutter 的字串操作庫,功能強大

stringr 專案封面
Stars
6
Forks
3
最近推送(UTC)
2026年8月3日
專案狀態
未封存
Chinmay Kabi GitHub avatar
GITHUB User

Chinmay Kabi ↗

SDE @blendto | Flutter Developer | Master Tinkerer

@blendtoBengaluru
語言Dart

此儲存庫發佈的套件

使用的依賴

依賴清單 2 項

原始 README

以下為英文專案原文快照,最新內容請造訪 GitHub。

展開 / 收合專案 README

stringr

pub package codecov License: MIT

A comprehensive string manipulation library for Dart and Flutter. Inspired by VocaJS, stringr provides powerful string operations that work seamlessly with Latin, non-Latin, and Unicode strings.

Features

  • Case Conversion - camelCase, snake_case, kebab-case, Title Case, PascalCase
  • Unicode Support - Full support for non-Latin scripts, diacritics, and grapheme clusters
  • Smart Word Detection - Uses regex patterns instead of simple whitespace splitting
  • Null Safety - Fully null-safe and compatible with Dart 3.0+
  • Zero Dependencies - Only depends on the characters package for grapheme support

Installation

Add to your pubspec.yaml:

dependencies:
  stringr: ^1.2.0

Quick Start

import 'package:stringr/stringr.dart';

void main() {
  // Case conversions
  print('hello world'.toCamelCase);        // helloWorld
  print('hello world'.toSnakeCase);        // hello_world
  print('hello world'.toKebabCase);        // hello-world
  print('hello world'.toPascalCase);       // HelloWorld

  // Smart word extraction
  print('XMLHttpRequest'.camelCase());     // xmlHttpRequest
  print('/path/to/file'.camelCase());      // pathToFile
  print('2infinity&beyond'.words());       // [2, infinity, beyond]
}

Unicode & Non-Latin Support

stringr shines with complex Unicode strings:

// Non-Latin scripts
print('полет птицы'.kebabCase());          // полет-птицы
print('La variété française'.prune(12));   // La variété

// Diacritics and latinization
print('café'.latinize());                  // cafe
print('anglikonų šiurkščios'.latinize());  // anglikonu siurkscios

// Grapheme-aware operations
print('café'.countGrapheme());             // 4 (not 5!)
print('👨‍👩‍👧‍👦'.reverse());                      // 👨‍👩‍👧‍👦 (family emoji stays intact)

API Overview

Case Manipulation
Method Description Example
camelCase() Convert to camelCase 'foo bar''fooBar'
snakeCase() Convert to snake_case 'foo bar''foo_bar'
kebabCase() Convert to kebab-case 'foo bar''foo-bar'
titleCase() Capitalize each word 'foo bar''Foo Bar'
capitalize() Capitalize first char 'foo''Foo'
swapCase() Toggle case 'FoO''fOo'
String Chopping
Method Description Example
truncate(n) Truncate to n chars 'hello world''hello...'
prune(n) Truncate without breaking words 'hello world''hello'
first(n) Get first n chars 'hello''hel'
last(n) Get last n chars 'hello''llo'
slice(start, end) Extract substring 'hello''ell'
Counting
Method Description Example
countGrapheme() Count visible characters 'café'4
countOccurrences(s) Count substring occurrences 'banana'.countOccurrences('a')3
countWords() Count words 'hello world'2
countWhere(fn) Count matching chars Custom predicate
Manipulation
Method Description Example
reverse() Reverse (grapheme-aware) 'hello''olleh'
slugify() URL-friendly slug 'Hello World!''hello-world'
latinize() Remove diacritics 'café''cafe'
insert(s, i) Insert at position 'hllo'.insert('e', 1)'hello'
Escaping
Method Description
escapeHtml() Escape HTML entities
unescapeHtml() Unescape HTML entities
escapeRegExp() Escape regex special chars

Why stringr?

Most string libraries fail with complex Unicode. stringr handles:

  • Grapheme clusters: 'café' is 4 characters, not 5
  • Surrogate pairs: Emoji and special symbols work correctly
  • Non-Latin scripts: Cyrillic, Greek, accented Latin, and more
  • Smart word detection: 'XMLHttpRequest'['XML', 'Http', 'Request']

Contributing

Contributions are welcome! Please read our Contributing Guide for details.

Project Health

License

MIT License - see LICENSE for details.