1. ホーム
  2. java

[解決済み] 文字列の長さに応じて文字列をトリミングする

2022-02-25 06:47:02

質問

文字列の長さが10文字を超えたら切り捨てたい。

例えば、文字列の長さが12であったとします ( String s="abcdafghijkl" を含むことになります。 "abcdefgh.." .

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

どのように解決するのですか?

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

使用方法 Math.min よりも既に短い文字列がある場合に例外が発生するのを防ぎます。 10 .


注意事項

  1. 上記は単純なトリミングを行うものです。 もし、文字列が長すぎる場合、最後の文字を3つのドットに置き換えたい場合は、Apache Commonsの StringUtils.abbreviate を参照してください。 解決策 . Unicode の水平方向の省略記号を使いたい場合は、@Basil さんの 解決策 .

  2. の典型的な実装の場合 String , s.substring(0, s.length()) を返します。 s を新たに確保するのではなく String .

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


1 - 平面 0(BMP)上にない Unicode コードポイントは、"代理ペア" として表されます(つまり、2 つのコードポイントがあります)。 char の値)を String . これを無視すると、文字列を10コードポイント未満に切り詰めたり、(最悪)サロゲートペアの途中で切り詰めたりする可能性がある。 一方 String.length() は Unicode テキストの長さを表す良い尺度ではないので、その特性に基づいてトリミングするのは間違ったことかもしれません。