【PowerShell】文字列の文字数を取得する


この記事はプロモーションを含みます。

PowerShell

ホーム > PowerShell 逆引きリファレンス

PowerShellで文字列の文字数を取得する方法を解説します。

半角文字のみの文字列

半角文字のみの文字列の文字数をカウントするサンプルです。

$targetString = 'ABC'
Write-Host $targetString.Length

実行結果です。

3

全角文字のみの文字列

全角文字のみの文字列の文字数をカウントするサンプルです。

$targetString = 'あいうえお'
Write-Host $targetString.Length

実行結果です。

5

半角と全角文字が混在している文字列

半角と全角文字が混在している文字列の文字数をカウントするサンプルです。

$targetString = 'あaいbうcえdおe'
Write-Host $targetString.Length

実行結果です。

10

サロゲートペアが含まれている文字列

サロゲートペアが含まれている文字列の文字数をカウントするサンプルです。

$targetString = '𠮷野家'
Write-Host $targetString.Length

サロゲートペアは、4byteで構成された文字になります。この文字が含まれていると、2文字として扱われるため、このサンプルでは、実行結果が「4」となってしまいます。
サロゲートペアについては以下で解説しています。

実行結果です。文字列にサロゲートペアが含まれているため正しく取得出来ていません。

4

サロゲートペアが含まれている場合も正しく取得する

サロゲートペアが含まれている場合でも、正しく取得するには、下記のように取得する必要があります。

$arrSp = $targetString -split "[\uD800-\uDBFF][\uDC00-\uDFFF]"
Write-Host ($targetString.Length - ($arrSp.Length - 1))

実行結果です。

3

簡単に解説します。
まず、サロゲートペアを[split]で配列に分割しています。

Splitで使用しているデリミタは下記を組み合わせています。
・ハイサロゲートの開始値-終了値:[\uD800-\uDBFF]
・ローサロゲートの開始値-終了値:[\uDC00-\uDFFF]

次行で、普通に取得した文字数からサロゲートペアで2文字として扱われた分を引くことで、正しい文字数を取得しています。

コメント

タイトルとURLをコピーしました