web-dev-qa-db-ja.com

文字列の文字数を制限し、残りを切り捨てる

クラス内で取得したいくつかの値を使用して、ログの最後にサマリーテーブルを作成する必要があります。テーブルは固定幅形式で印刷する必要があります。これを行うコードは既にありますが、文字列、倍精度浮動小数点数、および整数を、コードにハードコードされている固定幅サイズに制限する必要があります。

だから、私は固定幅のテーブルを印刷したいとします

    int,string,double,string
    int,string,double,string
    int,string,double,string
    int,string,double,string

    and the fixed widths are: 4, 5, 6, 6.

値がこの幅を超える場合、最後の文字を切り捨てる必要があります。たとえば、次のとおりです。

    124891, difference, 22.348, montreal

印刷する必要がある文字列は次のとおりです。

    1248 diffe 22.348 montre

文字列が特定の文字数を超えないようにするために、コンストラクターで何かを行う必要があると考えています。おそらくdoubleとintを文字列にキャストするので、最大幅の要件を強制できます。

どのメソッドがこれを行うのか、または文字列をインスタンス化して適切に動作させることができるのかわかりません。フォーマッタの使用は、文字列を印刷するための固定形式でのみ役立ちますが、実際には最大長を超える文字は切り取られません。

54
Flethuseo

これを使用して、不要な文字を切り取ります。

String.substring(0, maxLength); 

例:

String aString ="123456789";
String cutString = aString.substring(0, 4);
// Output is: "1234" 

入力文字列が予想される長さよりも短いときにIndexOutOfBoundsExceptionが発生しないようにするには、代わりに次の手順を実行します。

int maxLength = (inputString.length() < MAX_CHAR)?inputString.length():MAX_CHAR;
inputString = inputString.substring(0, maxLength);

整数と倍精度を特定の長さにしたい場合は、文字列表現を切り捨てるのではなく、 NumberFormat を使用して数値をフォーマットすることをお勧めします。

74
GETah

String.format("%3.3s", "abcdefgh")を使用することもできます。最初の桁は最小の長さ(文字列は短くなると左に埋め込まれます)、2番目の桁は最大の長さであり、文字列が長くなると切り捨てられます。そう

System.out.printf("'%3.3s' '%3.3s'", "abcdefgh", "a");

生産します

'abc' '  a'

(明らかに引用符を削除できます)。

157
Jaksa

読みやすさのために、私はこれを好む:

if (inputString.length() > maxLength) {
    inputString = inputString.substring(0, maxLength);
}

受け入れられた答えに。

int maxLength = (inputString.length() < MAX_CHAR)?inputString.length():MAX_CHAR;
inputString = inputString.substring(0, maxLength);
26
user3709124
25
khriskooper

これを簡単に実現できます

    shortString = longString.substring(0, Math.min(s.length(), MAX_LENGTH));
18
Arade

理想的には、テーブルを作成する目的で内部データ表現を変更しないようにしてください。 String.format()の問題は何ですか?必要な幅の新しい文字列を返します。

2
Ashwinee K Jha

解決策は次のようにJava.lang.String.format("%" + maxlength + "s", string).trim()になります。

int maxlength = 20;
String longString = "Any string you want which length is greather than 'maxlength'";
String shortString = "Anything short";
String resultForLong = Java.lang.String.format("%" + maxlength + "s", longString).trim();
String resultForShort = Java.lang.String.format("%" + maxlength + "s", shortString).trim();
System.out.println(resultForLong);
System.out.println(resultForShort);

出力:

Any string you want w

Anything short

2
Moesio

最大長が必要な場合は、StringUtils.leftを使用してください! ifまたはternary ?:は不要です。

int maxLength = 5;
StringUtils.left(string, maxLength);

出力:

      null -> null
        "" -> ""
       "a" -> "a"
"abcd1234" -> "abcd1"

Left Documentation

1
Gibolt