FLUTTER ECOSYSTEM

Chinmay-KB/stringr

Dart/Flutter向けの文字列操作ライブラリ、強化版

stringr のプロジェクト画像
Stars
6
Forks
3
最終プッシュ(UTC)
2026/08/03
プロジェクト状態
公開中
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.