文字列の長さに基づいて文字列をトリミングする 質問する

文字列の長さに基づいて文字列をトリミングする 質問する

長さが 10 文字を超える場合は文字列をトリミングします。

文字列の長さが 12 ( String s="abcdafghijkl") の場合、新しくトリミングされた文字列には が含まれることになります"abcdefgh.."

どうすればこれを実現できるでしょうか?

ベストアンサー1

s = s.substring(0, Math.min(s.length(), 10));

このようにを使用するとMath.min、文字列がすでに より短い場合に例外を回避できます10


ノート:

  1. 上記は単純なトリミングです。文字列が長すぎる場合に最後の文字を3つのドットに置き換えたい場合は、Apache Commonsを使用してくださいStringUtils.abbreviate。@H6の解決ユニコードの水平省略記号を使用する場合は、@Basilの解決

  2. の一般的な実装ではString、新しい を割り当てるのではなく、s.substring(0, s.length())を返します。sString

  3. 文字列にBMP外のUnicodeコードポイント(例えば絵文字)が含まれている場合、これは正しく動作しない可能性があります。すべてのUnicodeコードポイントで正しく動作する(より複雑な)解決策については、@sibnickの解決


1 - プレーン 0 (BMP) 上にない Unicode コードポイントは、charでは「サロゲート ペア」(つまり 2 つの値)として表されますString。これを無視すると、文字列が 10 未満のコード ポイントに切り詰められたり、(さらに悪いことに) サロゲート ペアの途中で切り捨てられたりする可能性があります。一方、 はString.length()Unicode テキストの長さの適切な尺度ではないため、そのプロパティに基づいて切り詰めるのは間違った方法である可能性があります。

おすすめ記事