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
実行結果です。文字列にサロゲートペアが含まれているため正しく取得出来ていません。
4
サロゲートペアが含まれている場合も正しく取得する
サロゲートペアが含まれている場合でも、正しく取得するには、下記のように取得する必要があります。
$arrSp = $targetString -split "[\uD800-\uDBFF][\uDC00-\uDFFF]" Write-Host ($targetString.Length - ($arrSp.Length - 1))
実行結果です。
3
簡単に解説します。
まず、サロゲートペアを[split]で配列に分割しています。
次行で、普通に取得した文字数からサロゲートペアで2文字として扱われた分を引くことで、正しい文字数を取得しています。
リンク
コメント