your programing

문자열의 문자 수를 제한하고 나머지는 잘라 내기

lovepro 2020. 12. 31. 23:10
반응형

문자열의 문자 수를 제한하고 나머지는 잘라 내기


클래스 내에서 얻은 일부 값을 사용하여 로그 끝에 요약 테이블을 만들어야합니다. 테이블은 고정 너비 형식으로 인쇄해야합니다. 이 작업을 수행하는 코드가 이미 있지만 Strings, doubles 및 int를 코드에 하드 코딩 된 고정 너비 크기로 제한해야합니다.

따라서 고정 너비 테이블을 인쇄하고 싶다고 가정하십시오.

    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를 문자열로 캐스팅 할 것이므로 최대 너비 요구 사항을 적용 할 수 있습니다.

나는 어떤 방법이 이것을 수행하는지 또는 문자열이 제대로 작동하도록 인스턴스화 될 수 있는지 모르겠습니다. 포맷터를 사용하면 문자열 인쇄를위한 고정 형식에만 도움이되지만 실제로 최대 길이를 초과하는 문자는 잘리지 않습니다.


필요하지 않은 문자를 잘라내려면 다음을 사용하십시오.

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 을 사용하여 숫자 형식 을 지정하는 것이 좋습니다 .


당신은 또한 사용할 수 있습니다 String.format("%3.3s", "abcdefgh"). 첫 번째 숫자는 최소 길이 (짧은 문자열은 왼쪽으로 채워짐)이고 두 번째 숫자는 최대 길이이며 더 길면 문자열이 잘립니다. 그래서

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

생산할 것이다

'abc' '  a'

(분명히 따옴표를 제거 할 수 있습니다).


가독성을 위해 다음을 선호합니다.

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

받아 들인 대답에.

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

StringUtils.substring(String str, int start, int end)null로부터 안전한 Apache Commons 정적 메서드를 사용할 수 있습니다 .

참조 : http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringUtils.html#substring%28java.lang.String,%20int,%20int% 29

http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/src-html/org/apache/commons/lang/StringUtils.html#line.1961


이것을 사용하여 쉽게 얻을 수 있습니다.

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

이상적으로는 테이블 생성을 위해 내부 데이터 표현을 수정하지 않도록해야합니다. String.format ()의 문제점은 무엇입니까? 필요한 너비로 새 문자열을 반환합니다.


해결책은 다음 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


최대 길이를 원하면 StringUtils.left! 아니요 if또는 ternary ?:필요합니다.

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

산출:

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

Left 선적 서류 비치

참조 URL : https://stackoverflow.com/questions/8369708/limiting-the-number-of-characters-in-a-string-and-chopping-off-the-rest

반응형