Wie kann man den ersten Buchstaben einer Zeichenfolge in Dart groß schreiben?


78

Wie kann ich das erste Zeichen einer Zeichenfolge groß schreiben, ohne die Groß- und Kleinschreibung eines der anderen Buchstaben zu ändern?

Zum Beispiel sollte "Dies ist eine Zeichenfolge" "Dies ist eine Zeichenfolge" ergeben.

Antworten:


74

Seit Dart Version 2.6 unterstützt Dart Erweiterungen:

extension StringExtension on String {
    String capitalize() {
      return "${this[0].toUpperCase()}${this.substring(1)}";
    }
}

Sie können Ihre Nebenstelle also einfach so anrufen:

import "string_extension.dart";

var someCapitalizedString = "someString".capitalize();

4
Die Erweiterung sollte zurückkehren return "${this[0].toUpperCase()}${this.substring(1).toLowerCase()}";. Wenn nicht, wird "dies" korrekt großgeschrieben, aber nicht "DIESES".
Luciano Rodríguez

3
Prüfen Sie normalerweise nicht, ob ein Wert gültig ist, bevor Sie damit arbeiten?
Hannah Stark

Wir müssen entweder isEmpty in capitalize () überprüfen oder es dem Anrufer überlassen. Ich bevorzuge den Anrufer, damit der Code nicht mit .isEmpty () - Prüfungen übersät werden muss. Sie können if (isEmpty) return thisals erste Zeile hinzufügen .
Venkat D.

Ich muss überprüfen, ob dies leer ist, um den Absturz zu vermeiden. Ich glaube nicht, dass toLowerCase () mit einer leeren Zeichenfolge abstürzen würde und Ihre Erweiterung auch nicht
Lucas Chwe

83

Kopieren Sie dies irgendwo:

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(" ");
}

Verwendung:

final helloWorld = 'hello world'.inCaps; // 'Hello world'
final helloWorld = 'hello world'.allInCaps; // 'HELLO WORLD'
final helloWorld = 'hello world'.capitalizeFirstofEach; // 'Hello World'

Alte Antwort:

main() {
  String s = 'this is a string';
  print('${s[0].toUpperCase()}${s.substring(1)}');
}

7
wird sich beschweren, wenn die Zeichenfolge leer oder nicht lang genug ist.
Rishi Dua

16
@ RishiDua sowie ein Entwickler, (standardmäßig) haben wir die Verantwortung, für diese Bedingungen zu überprüfen 🐱‍👤
Jawand Singh

6
str.capitalizeist nicht definiert . Also benutzt dustr.inCaps
Ashan

hat bei mir nicht funktioniert
Sam Ramezanli

49
void main() {
  print(capitalize("this is a string"));
  // displays "This is a string"
}

String capitalize(String s) => s[0].toUpperCase() + s.substring(1);

Sehen Sie sich dieses Snippet auf DartPad an: https://dartpad.dartlang.org/c8ffb8995abe259e9643

Alternativ können Sie das Zeichenfolgenpaket verwenden , siehe Großschreibung .


3
s[0].toUpperCase() + s.substring(1).toLowerCase();falls die Zeichenfolge zunächst nur in Großbuchstaben geschrieben ist.
TomTom101

42

Das Analysieren von Teilzeichenfolgen in den anderen Antworten berücksichtigt keine Gebietsschema-Abweichungen. Die Funktion toBeginningOfSentenceCase () im intl/intl.dartPaket verarbeitet die einfache Satzumhüllung und das gepunktete "i" in Türkisch und Aserbaidschanisch.

import 'package:intl/intl.dart';
...
String sentence = toBeginningOfSentenceCase('this is a string'); // This is a string

13

Es gibt ein Utils-Paket, das diese Funktion abdeckt. Es gibt einige weitere nette Methoden für die Operation an Strings.

Installieren Sie es mit:

dependencies:
  basic_utils: ^1.2.0

Verwendung :

String capitalized = StringUtils.capitalize("helloworld");

Github:

https://github.com/Ephenodrom/Dart-Basic-Utils


nettes Paket. Vielen Dank für das Teilen
Dani

6

Sie können dieses Paket in Flatter ReCase verwenden. Es bietet Ihnen verschiedene Funktionen zur Fallkonvertierung wie:

  • snake_case
  • dot.case
  • Pfad / Fall
  • param-case
  • PascalCase
  • Header-Case
  • Titel Fall
  • camelCase
  • Satzfall
  • CONSTANT_CASE

    ReCase sample = new ReCase('hello world');
    
    print(sample.sentenceCase); // Prints 'Hello world'
    

4

So suchen Sie nach Null- und Leerzeichenfolgen, auch mit den Kurznotationen:

  String capitalizeFirstLetter(String s) =>
  (s?.isNotEmpty ?? false) ? '${s[0].toUpperCase()}${s.substring(1)}' : s;

Ich glaube nicht, dass dies überprüft null.
Giraldi

4
String capitalize(String s) => (s != null && s.length > 1)
    ? s[0].toUpperCase() + s.substring(1)
    : s != null ? s.toUpperCase() : null;

Es besteht Tests:

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!');
});

4
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

Dies kann zwar die Frage beantworten, Sie sollten jedoch weitere Erläuterungen hinzufügen, damit das OP den Grund dafür erkennt.
Phong

3

Sie sollten auch überprüfen, ob die Zeichenfolge null oder leer ist.

String capitalize(String input) {
  if (input == null) {
    throw new ArgumentError("string: $input");
  }
  if (input.length == 0) {
    return input;
  }
  return input[0].toUpperCase() + input.substring(1);
}

3

Wie bereits von Ephenodrom erwähnt, können Sie das Paket basic_utils in Ihre Datei pubspeck.yaml einfügen und in Ihren Dart-Dateien wie folgt verwenden:

StringUtils.capitalize("yourString");

Das ist für eine einzelne Funktion akzeptabel, aber in einer größeren Kette von Operationen wird es unangenehm.

Wie in der Dokumentation zur Dart-Sprache erläutert :

doMyOtherStuff(doMyStuff(something.doStuff()).doOtherStuff())

Dieser Code ist viel weniger lesbar als:

something.doStuff().doMyStuff().doOtherStuff().doMyOtherStuff()

Der Code ist auch viel weniger auffindbar , da eine IDE doMyStuff () nach etwas.doStuff () vorschlagen kann, aber es ist unwahrscheinlich, dass doMyOtherStuff (…) um den Ausdruck gesetzt wird.

Aus diesen Gründen sollten Sie dem String-Typ eine Erweiterungsmethode hinzufügen (Sie können dies seit Dart 2.6 tun!), Wie folgt:

/// 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()`


2

Dieser Code funktioniert für mich.

String name = 'amina';    

print(${name[0].toUpperCase()}${name.substring(1).toLowerCase()});

2

Dies ist eine weitere Alternative, um Strings in Dart mithilfe der String-Klassenmethode groß zu schreiben 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 

1
Gute Lösung, funktioniert aber nicht mit diakritischen Buchstaben
Palejandro

Es ist normal wegen der Regex, wenn Sie es tun möchten, passen Sie die Regex so an, dass sie diese Buchstaben enthält
Ndimah

2

Sie können die Methode capitalize () der Zeichenfolgenbibliothek verwenden, die jetzt in der Version 0.1.2 verfügbar ist, und die Abhängigkeit in der Datei pubspec.yaml hinzufügen:

dependencies:
  strings: ^0.1.2

und importiere es in die Dart-Datei:

import 'package:strings/strings.dart';

und jetzt können Sie die Methode verwenden, die den folgenden Prototyp hat:

String capitalize(String string)

Beispiel:

print(capitalize("mark")); => Mark 

2

Seltsam, dass dies zunächst nicht in Dart verfügbar ist. Unten finden Sie eine Erweiterung, um Folgendes zu aktivieren String:

extension StringExtension on String {
  String capitalized() {
    if (this.isEmpty) return this;
    return this[0].toUpperCase() + this.substring(1);
  }
}

StringZunächst wird überprüft, ob das nicht leer ist. Dann wird nur der erste Buchstabe groß geschrieben und der Rest hinzugefügt

Verwendung:

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"

1
var orig = "this is a string";
var changed = orig.substring(0, 1).toUpperCase + orig.substring(1)

1

Einige der populäreren anderen Antworten scheinen nicht mit nullund umzugehen ''. Ich ziehe es vor, mich nicht mit diesen Situationen im Client-Code befassen zu müssen, ich möchte nur eine StringGegenleistung, egal was passiert - auch wenn dies im Falle von eine leere bedeutet null.

String upperCaseFirst(String s) => (s??'').length<1 ? '' : s[0].toUpperCase() + s.substring(1)

1

Sie können das Text_Tools-Paket verwenden, das einfach zu verwenden ist:

https://pub.dev/packages/text_tools

Ihr Code würde so aussehen:

//This will print 'This is a string
print(TextTools.toUppercaseFirstLetter(text: 'this is a string'));

1

Die einfachste Antwort ist hier:

Machen Sie zuerst den ersten Buchstaben der Zeichenfolge in Großbuchstaben, indem Sie den Index verwenden, und verknüpfen Sie dann den Rest der Zeichenfolge.

Hier ist der Benutzername die Zeichenfolge.

Benutzername [0] .toUpperCase () + Benutzername.substring (1);


0
String fullNameString =
    txtControllerName.value.text.trim().substring(0, 1).toUpperCase() +
        txtControllerName.value.text.trim().substring(1).toLowerCase();

Von Nur-Code-Antworten wird bei Stapelüberlauf abgeraten, da sie nicht erklären, wie das Problem gelöst wird. Bitte bearbeiten Sie Ihre Antwort, um zu erklären, was der Code tut und wie er die Frage beantwortet, damit er sowohl für andere Benutzer als auch für das OP nützlich ist.
FluffyKitten

0

Hier ist meine Antwort mit Dart-String-Methoden.

String name = "big";
String getFirstLetter = name.substring(0, 1);    
String capitalizedFirstLetter =
      name.replaceRange(0, 1, getFirstLetter.toUpperCase());  
print(capitalizedFirstLetter);

0

Hiermit teile ich meine Antwort

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;
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.