문자열 길이를 기준으로 문자열 트리밍
길이가 10자를 넘으면 줄을 자르고 싶어요.
가정합니다.String s="abcdafghijkl"
에는 ), 의 ), will will will will will will will will음음음음음음음음음음음음음음음 ) ) )가 포함됩니다."abcdefgh.."
.
어떻게 하면 좋을까요?
s = s.substring(0, Math.min(s.length(), 10));
「」를 사용합니다.Math.min
수 있습니다.10
.
주의:
위는 간단한 트리밍을 합니다.길 경우 Commons 를 합니다.
StringUtils.abbreviate
@H6의 솔루션을 참조해 주세요.유니코드 가로줄임표 문자를 사용하려면 @Basil의 솔루션을 참조하십시오.「 」의인 .
String
,s.substring(0, s.length())
s
것을 이 아니라String
.문자열에 BMP 외부에 Unicode 코드 포인트가 포함되어 있는 경우, 예를 들어 다음과 같이) 잘못 동작할1 수 있습니다.이모티콘.모든 Unicode 코드 포인트에서 올바르게 동작하는 (더 복잡한) 솔루션에 대해서는, @sibnick의 솔루션을 참조해 주세요.
- 0 0)에 없는 포인트는 " 쌍"으로 , 2개의 1 - 0 0 (BMP) " Unicode " " " " " " " " ( 2 ) ) " " " " " " " " " " " " " ( 2 ) " " " " ) " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " "char
을 설정합니다.String
이를 무시하면 문자열이 10개 미만의 코드 포인트로 트리밍되거나 (더 나쁜) 서로게이트 쌍의 중간에 잘라질 수 있습니다. 반,는String.length()
는 Unicode 텍스트 길이를 측정하는 데 적합하지 않기 때문에 해당 속성에 따라 트리밍하는 것은 올바르지 않을 수 있습니다.
StringUtils.abbreviate
Apache Commons Lang 라이브러리의 친구가 될 수 있습니다.
StringUtils.abbreviate("abcdefg", 6) = "abc..."
StringUtils.abbreviate("abcdefg", 7) = "abcdefg"
StringUtils.abbreviate("abcdefg", 8) = "abcdefg"
StringUtils.abbreviate("abcdefg", 4) = "a..."
Commons Lang3에서는 커스텀 스트링을 대체 마커로 설정할 수도 있습니다.이를 통해 예를 들어 단일 문자 줄임표를 설정할 수 있습니다.
StringUtils.abbreviate("abcdefg", "\u2026", 6) = "abcde…"
Commons Apache Commons가 .StringUtils
이 기능을 합니다.
s = StringUtils.left(s, 10)
len 문자를 사용할 수 없거나 String이 null인 경우 String은 예외 없이 반환됩니다.len이 음수인 경우 빈 문자열이 반환됩니다.
StringUtils.left(null, ) = null
StringUtils.left(, -ve) = " "
String "String Utils.left("", *) = " " "
"StringUtils.left("abc", 0) = " " "
2 "StringUtils.left("abc", 2) = "ab"
= "StringUtils.left("abc", 4) = "param"
우대:스티브 매콜리
평상시와 같이 UTF-16의 대리쌍은 아무도 신경 쓰지 않습니다.자세한 내용은 이쪽:실제로 사용되고 있는 가장 일반적인 비BMP Unicode 문자는 무엇입니까?org.apache.commons/commons-lang3의 저자까지
이 예에서는, 올바른 코드와 통상의 코드의 차이를 확인할 수 있습니다.
public static void main(String[] args) {
//string with FACE WITH TEARS OF JOY symbol
String s = "abcdafghi\uD83D\uDE02cdefg";
int maxWidth = 10;
System.out.println(s);
//do not care about UTF-16 surrogate pairs
System.out.println(s.substring(0, Math.min(s.length(), maxWidth)));
//correctly process UTF-16 surrogate pairs
if(s.length()>maxWidth){
int correctedMaxWidth = (Character.isLowSurrogate(s.charAt(maxWidth)))&&maxWidth>0 ? maxWidth-1 : maxWidth;
System.out.println(s.substring(0, Math.min(s.length(), correctedMaxWidth)));
}
}
s = s.length() > 10 ? s.substring(0, 9) : s;
또는 String Utils가 없는 경우 다음 방법을 사용할 수 있습니다.
public static String abbreviateString(String input, int maxLength) {
if (input.length() <= maxLength)
return input;
else
return input.substring(0, maxLength-2) + "..";
}
문자열의 마지막 10자를 트리밍하고 유지하는 방법을 찾고 있는 경우에 대비합니다.
s = s.substring(Math.max(s.length(),10) - 10);
dr;dr
줄임표를 원하는 것 같네요.…
)는, 잘라낼 때의 마지막 자리입니다.입력 문자열을 조작할 수 있는 원라이너입니다.
String input = "abcdefghijkl";
String output = ( input.length () > 10 ) ? input.substring ( 0 , 10 - 1 ).concat ( "…" ) : input;
이 코드는 IdeOne.com에서 라이브로 실행됩니다.
abcdefghi...
삼항 연산자
삼진 연산자를 이용하면 원라이너를 만들 수 있습니다.
String input = "abcdefghijkl" ;
String output =
( input.length() > 10 ) // If too long…
?
input
.substring( 0 , 10 - 1 ) // Take just the first part, adjusting by 1 to replace that last character with an ellipsis.
.concat( "…" ) // Add the ellipsis character.
: // Or, if not too long…
input // Just return original string.
;
이 코드는 IdeOne.com에서 라이브로 실행됩니다.
abcdefghi...
자바 스트림
Java Streams 기능은 Java 9 이후부터 이를 흥미롭게 합니다.흥미롭긴 하지만 최선의 접근법은 아닐 수도 있습니다.
우리는보다는 코드 포인트를 사용한다.char
가치.그char
매개 변수 형식은 된 유산을 관리하고 모든 가능한 유니 코드 문자의 하위 집합으로 제한되어 있다.
String input = "abcdefghijkl" ;
int limit = 10 ;
String output =
input
.codePoints()
.limit( limit )
.collect( // Collect the results of processing each code point.
StringBuilder::new, // Supplier<R> supplier
StringBuilder::appendCodePoint, // ObjIntConsumer<R> accumulator
StringBuilder::append // BiConsumer<R,R> combiner
)
.toString()
;
만약 우리가 가지고 있던 과도한 문자, 생략 부호와의 마지막 캐릭터 교체들의 길이를 줄였다.
if ( input.length () > limit )
{
output = output.substring ( 0 , output.length () - 1 ) + "…";
}
내가 그"이상 제한, ellipsis 하"를 가진 유선을 모아 놓을 생각할 수 있다.
문제는 자바로지만, 생각이 2014년에 요청했다.
지금 코틀린사용하는 경우 이름만큼: 간단하다.
yourString.take(10)
반환합니다 문자열 이 문자열에서 첫번째 n문자를 포함하는, 또는 전체 문자열 이 문자열 키가 작다.
str==null ? str : str.substring(0, Math.min(str.length(), 10))
또는,
str==null ? "" : str.substring(0, Math.min(str.length(), 10))
nullWorkswith.
//인 문자열의 길이 단축.. //님의 수업을 다음 메서드를 가중시킨다는 것입니다.
private String abbreviate(String s){
if(s.length() <= 10) return s;
return s.substring(0, 8) + ".." ;
}
언급URL:https://stackoverflow.com/questions/8499698/trim-a-string-based-on-the-string-length
'source' 카테고리의 다른 글
Java에서는 루프에 비해 스트림의 장점은 무엇입니까? (0) | 2022.08.16 |
---|---|
Vue 관리도 js 동적 레이더 차트 (0) | 2022.08.16 |
Java Import 스테이트먼트에 와일드 카드를 사용하는 것이 나쁜 이유는 무엇입니까? (0) | 2022.08.16 |
html에서 호출할 때 가져온 Javascript 함수가 정의되지 않았습니다. (0) | 2022.08.16 |
JavaFX 응용 프로그램아이콘 (0) | 2022.08.14 |