[Flutter]Dart의 문자열 작업 레이블

52386 단어 FlutterDarttech
조사를 편리하게 하기 위해 총결산을 하였다.사용된 데이터의 버전은 2.12.4입니다.

기본 문자열


Dart의 문자열은 String 레벨입니다.
Dart의 문자열은 변하지 않기 (immutable) 때문에 어떤 처리를 하는 상황에서 원래의 문자열 자체가 변경된 것이 아니라 새로운 문자열을 되돌려줍니다.String(문자열) 실시Pattern, 그RegExp(정규 표현식)도 마찬가지다.문자열과 관련된 여러 가지 방법 중에서 매개 변수Pattern로 전달할 수 있는 방법이 매우 많은데 이런 방법에서는 정규 표현식을 사용할 수 있다.
데이터에 문자 형식 ((char 이 없고, 모두 String (문자열) 이 없습니다.컨텐트 유니코드 코드점String을 처리할 수 있지만 거의 사용하지 않습니다.

문자열 정의


문자열에는 한 행과 여러 행이 있습니다.
문자열의 정의는 싱글 따옴표와 더블 따옴표를 사용할 수 있지만 기본적으로 싱글 따옴표는 표준이다.
final s1 = 'シングルクォート';
final s2 = "ダブルクォート"; // (シングルクォートが標準ということで、Lintで警告が出ることがある)
final s3 = 'シングル"ダブル"クォート';
final s4 = "ダブル'シングル'クォート"; // (こういう必要な場合にはダブルクォートでもLintの警告は出ない)

// 複数行の文字列は、3連続クォートを使用する。
final m1 = '''複数行
の
文字列''';

// 複数行の文字列では、開始直後の改行だけは無視される。
final m2 = """
複数行
の
文字列""";
print(m1 == m2); // true

// \n や \t といったエスケープシーケンスが使える。
final m3 = '複数行\nの\n文字列';
print(m1 == m3); // true

// クォートに r を付けることで、エスケープシーケンスを適用しない「生文字列」にできる。
// 正規表現を書くようなときに便利。
final s5 = r'複数行\nの\n文字列ではない'; // 複数行\nの\n文字列ではない
==에서 문자열의 내용을 비교할 수 있습니다.

문자열 및 포함 값 결합


간단한 문자열의 연결 사용 +.
// + で文字列同士を連結できる。
final s1 = 'Dart' + 'は' + 'ダート'; // Dartはダート

// 文字列を並べるだけでも連結できるが、あまり使わない気がする。
final s2 = 'Dart' 'は' 'ダート'; // Dartはダート
문자열에 값을 삽입${}합니다.이 파괄호에 변수 이름과 함수 등을 쓰십시오.
문제가 없더라도 대괄호를 생략하여 Lin에 지정하는 것이 좋습니다.( Effective Dart에도 생략 추천으로 써있어요. )
final s3 = 'あいうえお';
print('$s3は${s3.length}文字'); // あいうえおは5文字

// 変数の後に英数字が続くようなときは、波括弧でくくる必要がある。なぜならどこまでが変数名か分からないから。
// print('$s3desu'); // (コンパイルエラー)
print('${s3}desu'); // あいうえおdesu
// 後続が記号だったり日本語だったりする場合は波括弧不要。
print('$s3 desu'); // あいうえお desu
print('$s3デス'); // あいうえおデス

// 「$」をそのまま表示したいときはバックスラッシュ(円記号)でエスケープする。
print('\$s3は\${s3.length}文字'); // $s3は${s3.length}文字
간단한 값을 삽입할 뿐만 아니라 포맷하고자 하는 경우sprintf로 봉인합니다.
https://pub.dev/packages/sprintf

문자열 길이 등 가져오기


final s0 = '';
final s1 = 'あいうえお';

// 文字列が空か否かを調べる。
print(s0.isEmpty); // true
print(s1.isEmpty); // false
print(s0.isNotEmpty); // false
print(s1.isNotEmpty); // true

// 文字列の長さを調べる。
print(s0.length); // 0
print(s1.length); // 5

문자열 찾기


final s = 'うえうえしたした';

// 指定した文字列(パターン)を含むか否かを調べる。
print(s.contains('した')); // true
print(s.contains('ひだり')); // false

// 指定した文字列(パターン)で始まるか否かを調べる。
print(s.startsWith('うえ')); // true
print(s.startsWith('した')); // false

// 指定した文字列(パターン)で終わるか否かを調べる。
print(s.endsWith('した')); // true
print(s.endsWith('うえ')); // false

// 指定した文字列(パターン)が最初に出てくるインデックスを取得する
print(s.indexOf('うえ')); // 0
print(s.indexOf('した')); // 4
// 2番目の引数(start)に整数を渡すと、そのインデックスから検索を開始する。
print(s.indexOf('うえ', 1)); // 2
print(s.indexOf('した', 6)); // 6
// 見付からなかったら -1 が返ってくる。
print(s.indexOf('ひだり')); // -1
print(s.indexOf('うえ', 5)); // -1
// start が文字列の長さ(length)より大きいとエラーになる。
// print(s.indexOf('うえ', 99)); // (コンパイルエラー)

// 指定した文字列(パターン)が最後に出てくるインデックスを取得する
print(s.lastIndexOf('うえ')); // 2
print(s.lastIndexOf('した')); // 6
// 2番目の引数(start)に整数を渡すと、そのインデックスより前から検索を開始する。
print(s.lastIndexOf('うえ', 1)); // 0
print(s.lastIndexOf('した', 4)); // 4
// 見付からなかったら -1 が返ってくる。
print(s.lastIndexOf('ひだり')); // -1
print(s.lastIndexOf('した', 3)); // -1
// start が文字列の長さ(length)より大きいとエラーになる。
// print(s.indexOf('うえ', 99)); // (例外発生)
보시다시피 일본어의 한 문자는'1문자'로 계산됩니다.사실 거기에는'문자가 무엇인가'라는 유니코드가 있어 복잡하다면 그것에 관해서는 생략한다.일반적으로 사용할 때는 이 점을 의식할 필요가 없을 것이다.

문자열의 일부분 가져오기 (추출)


final s = 'あいうえお';

// 指定したインデックスの文字(n文字目)を取得する。Dartに文字型はないので、「1文字の文字列」が返ってくる。
print(s[1]); // い
// 文字列の長さより大きい値を指定すると実行時エラーとなる。
// print(s[99]); // (エラー)

// 指定したインデックス以降の文字列(末尾まで)を取得する。
print(s.substring(2)); // うえお
// 2番目の引数(end)に整数を渡すと、それ未満までの文字列を取得できる。
print(s.substring(2, 4)); // うえ
// endに不正な値(負の値、1番目の引数より小さな値、文字列の長さよりも大きな値)を指定すると実行時エラーとなる。
// print(s.substring(2, -1)); // (エラー)
// print(s.substring(2, 1)); // (エラー)
// print(s.substring(2, 99)); // (エラー)

분할 문자열

split()가 되돌아오기 때문에List<String> 순환하거나 균형기로 처리할 수 있습니다.
final s0 = '';
final s1 = 'Hello Dart world';
final s2 = 'あいいう';

// 引数で渡された文字列(パターン)で分割する。
print(s1.split(' ')); // ['Hello', 'Dart', 'world']
print(s2.split('い')); // ['あ', '', 'う']
// 空文字列を渡すと、すべての文字で分割するので、1文字ずつ処理できる。
print(s2.split('')); // ['あ', 'い', 'い', 'う']
// 空文字列に対してsplitすると、以下のような結果になる。
print(s0.split('')); // [] (空のリスト)
print(s0.split('').length); // 0
print(s0.split('a')); // [''] (空の文字列を1個含むリスト)
print(s0.split('a').length); // 1

문자열 바꾸기


이후의 변환 시스템 처리에서, 처음에 말한 바와 같이, 기존의 문자열을 바꾸는 것이 아니라, 바뀐 새로운 문자열을 되돌려줍니다.
final s = 'うえうえしたした';

// replaceFirst(Pattern from, String to, [int startIndex = 0]) → String
// 最初に見付かった文字列(パターン)fromを、文字列toへ置換する。
print(s.replaceFirst('した', 'ひだり')); // うえうえひだりした
// startIndexを指定すると、そのインデックス以降で最初に見つかったfromをtoへ置換する。
print(s.replaceFirst('した', 'ひだり', 5)); // うえうえしたひだり

// replaceAll(Pattern from, String replace) → String
// 見付かったすべての文字列(パターン)fromを、文字列toへ置換する。
print(s.replaceAll('した', 'ひだり')); // うえうえひだりひだり

공백 삭제


삭제된 공백은 공백입니다.구체적으로 반각 공간, 줄 바꿈 코드, 라벨 등을 대상으로 한다.
final s = '  Dart  \n';

// 両端のホワイトスペースを削除する。
print(s.trim()); // 'Dart'

// 左側(文字列の始端側)のホワイトスペースを削除する。
print(s.trimLeft()); // 'Dart  \n'

// 右側(文字列の終端側)のホワイトスペースを削除する。
print(s.trimRight()); // '  Dart'

추가 공백


final s1 = 'short';   // 5文字
final s2 = 'LOOOONG'; // 7文字

// padLeft(int width, [String padding = ' ']) → String
// 引数widthで指定した幅になるように、左側に半角スペースを挿入する。
print(s1.padLeft(7)); // '  short'
print(s2);            // 'LOOOONG'
// widthが文字列の長さよりも短い場合は何もしない。
print(s2.padLeft(1)); // 'LOOOONG'
// 引数paddingで、埋める文字列を指定できる。(paddingを省略した場合はデフォルト値の半角スペース)
print(s1.padLeft(7, '-')); // '--short'
// paddingで埋める回数は、元の文字列の長さとwidthで指定した幅を比較したもの。
// したがってpaddingが1文字ではない場合は、結果的に文字列の長さがwidthとは異なる。
// でもこれは逆にHTML出力時に &nbsp; で揃えるような場合に便利。
print(s1.padLeft(7, '&nbsp;')); // '&nbsp;&nbsp;short'

// padRight(int width, [String padding = ' ']) → String
// 右側に挿入するだけで、動作は上記の padLeft と同様。
print(s1.padRight(7)); // 'short  '
print(s2);             // 'LOOOONG'
print(s2.padRight(1)); // 'LOOOONG'
print(s1.padRight(7, '-')); // 'short--'
print(s1.padRight(7, '&nbsp;')); // 'short&nbsp;&nbsp;'

대소문자 변환


final s1 = 'Dart'; // 半角英数
final s2 = 'Dart'; // 全角英数

// 大文字にする。
print(s1.toUpperCase()); // 'DART'
// 全角英数にも効く。
print(s2.toUpperCase()); // 'DART'

// 小文字にする。
print(s1.toLowerCase()); // 'dart'
// 全角英数にも効く。
print(s2.toLowerCase()); // 'dart'

정규 표현식 사용


처음에 쓴 바와 같이 정규 표현식 모드를 String류의 일부 방법에 전달할 수 있다.위의 매개 변수에'도안'이라고 쓰여 있는 것이 바로 그것이다.
final s = 'うえうえしたした';
print(s.split(RegExp(r'え.*し'))); // [う, た]
print(s.split(RegExp(r'え.*?し'))); // [う, たした] (最左最短マッチ)
print(s.replaceFirst(RegExp(r'え.{1}た'), 'で')); // うえうでした

한 글자씩 처리하다.


위에서 말한 split('')를 사용하여 모든 문자를 분할하는 방법을 이해하기 쉽다.List<String>를 얻었기 때문에 균형기로 처리할 수 있습니다.
또한 runes를 통해 문자 코드(rune, Unicde 코드점)의 목록을 얻는 방법도 있다.이렇게 하면 int 문자 연산을 직접 할 수 있다.다만 자모 이외에 사용할 때는 문자 코드의 배열에 주의해야 한다.
print('あいうえお'.split('')); // [あ, い, う, え, お]

final s = 'IBM-ibmあいびーえむ';
// マイナス1して、1文字前を得る。
print(s.runes.map((v) => String.fromCharCode(v - 1)).join()); // HAL,halぁぃひ・ぇみ

유형 변환


문자열 조작은 아니지만 비슷한 것을 자주 사용한다.
다양한 유형의 정적 방법을 사용하여 변환합니다.

parse로 변환


// parse(String source, {int? radix, int onError(String source)}) → int
print(int.parse('42')); // 42
print(int.parse('-7')); // -7
print(int.parse('  77  \n')); // 77 (前後のホワイトスペースは無視される)
// 引数radixに基数(何進数か)を指定できる。省略されている場合は10進数。
print(int.parse('A', radix: 16)); // 10 (16進数)
print(int.parse('fF', radix: 16)); // 255 (16進数)
print(int.parse('1100', radix: 2)); // 12
print(int.parse('1100', radix: 8)); // 576
print(int.parse('1100', radix: 10)); // 1100
print(int.parse('1100', radix: 16)); // 4352
// 変換できない場合は例外が発生する。
// int.parse('10.0'); // (例外発生)
// int.parse('9a'); // (例外発生)
// 引数の onError は非推奨。

// tryParse(String source, {int? radix}) → int?
// パースに失敗する可能性がある場合は、parseで例外をキャッチするより、tryParseの使用がおすすめ。
final value = int.tryParse('A'); // 変換に失敗して null が返される。
if (value == null) {
  // ... 変換エラー時の処理
}
// あるいはこんな書き方でnullの場合の値を設定できる。
final value2 = int.tryParse('A') ?? 0;

int로 변환


// parse(String source, [double onError(String source)]) → double
// doubleは色々な表現の文字列で初期化できる。
print(double.parse('3.14')); // 3.14
print(double.parse('  3.14 \xA0')); // 3.14 (前後のホワイトスペースは無視される)
print(double.parse('0.')); // 0.0
print(double.parse('.1')); // 0.1
print(double.parse('-1.e3')); // -1000.0
print(double.parse('1234E+7')); // 12340000000.0
print(double.parse('+.12e-9')); // 1.2e-10
print(double.parse('-NaN')); // NaN
print(double.parse('Infinity')); // Infinity
// 変換できない場合は例外が発生する。
// double.parse('A'); // (例外発生)
// 引数の onError は非推奨。

// tryParse(String source) → double?
// パースに失敗する可能性がある場合は、parseで例外をキャッチするより、tryParseの使用がおすすめ。
final value = double.tryParse('A'); // 変換に失敗して null が返される。
if (value == null) {
  // ... 変換エラー時の処理
}

다른 형식에서 더블 형식으로 변환


문자열에 대한 변환은 각 분류에서 실행되는 방법String을 호출하거나 toString()로 문자열에 삽입됩니다.이 두 개는 모두 같은 처리다.

후기


다양한 언어를 접하고 쓰는 방법이 달라 혼란스러워 좋은 정보를 찾지 못하는 데이터를 정리했다.
하지만 라벨을 제목으로 하면 좀 더 짜임새 있는 게 좋을 것 같은데 구체적인 예를 썼기 때문에 어쩔 수 없었어요.

좋은 웹페이지 즐겨찾기