크기를 확인하거나 범위를 벗어나지 않고 문자열의 첫 번째 n자를 가져오려면 어떻게 해야 합니까?
어떻게 하면 첫 번째에 도달할 수 있을까요?n
크기 체크를 먼저 하지 않거나(인라인은 허용 가능), 또는 위험성이 없는 Java 문자열의 문자IndexOutOfBoundsException
?
다음은 깔끔한 해결책입니다.
String upToNCharacters = s.substring(0, Math.min(s.length(), n));
의견: 이 솔루션은 「신기」하지만, 실제로는, 사용하는 솔루션보다 읽기 어렵다고 생각합니다.if
/else
뻔한 방법으로.만약 독자가 이 트릭을 보지 못했다면, 그/그녀는 코드를 이해하기 위해 더 많은 생각을 해야 한다.IMO, 코드의 의미는 더 명확합니다.if
/else
버전입니다.보다 깔끔하고 읽기 쉬운 솔루션에 대해서는 @paxdiablo의 답변을 참조하십시오.
바퀴를 재발명하지 말고...:
org.apache.commons.lang.StringUtils.substring(String s, int start, int len)
Javadoc의 설명:
StringUtils.substring(null, *, *) = null StringUtils.substring("", * , *) = ""; StringUtils.substring("abc", 0, 2) = "ab" StringUtils.substring("abc", 2, 0) = "" StringUtils.substring("abc", 2, 4) = "c" StringUtils.substring("abc", 4, 6) = "" StringUtils.substring("abc", 2, 2) = "" StringUtils.substring("abc", -2, -1) = "b" StringUtils.substring("abc", -4, 2) = "ab"
다음과 같이 됩니다.
StringUtils.substring("abc", 0, 4) = "abc"
Apache Commons Lang에는 방법이 있습니다.
String upToNCharacters = StringUtils.left(s, n);
String upToNCharacters = String.format("%."+ n +"s", str);
끔찍하다n
는 변수입니다(따라서 형식 문자열을 작성해야 합니다).단, 상수가 있는 경우는 매우 명확합니다.
String upToNCharacters = String.format("%.10s", str);
SO에 관한 질문의 클래스가 있어, 때때로 완전히 이해되지 않는 경우가 있습니다.이것은 위험하게 가까운 것입니다. :-)
아마도 당신은 당신이 배제했던 두 가지 방법 중 하나를 사용하는 것에 대한 혐오감을 설명할 수 있을 것이다.
만약 그게 단지 당신이 당신의 코드를 후추하고 싶지 않아서라면if
스테이트먼트 또는 예외 캐치 코드입니다.한 가지 해결 방법은 다음과 같은 도우미 기능을 사용하는 것입니다.
static String substring_safe (String s, int start, int len) { ... }
미리 길이를 확인하고 그에 따라 작동합니다(작은 문자열 또는 공백이 있는 패드를 반환).
그럼 코드로 걱정할 필요 없어요.전화만 하면 됩니다.
String s2 = substring_safe (s, 10, 7);
다음 대신:
String s2 = s.substring (10,7);
이것은, 많은 스트링 구축 작업을 실시할 때, 코드의 흐름을 끊지 않고(다른 회답에 대한 코멘트에 근거해) 고민하고 있는 경우에 유효합니다.
다음과 같이 서브스트링 방식을 사용합니다.
int n = 8;
String s = "Hello, World!";
System.out.println(s.substring(0,n);
n이 문자열 길이보다 클 경우 한 코멘트가 지적한 바와 같이 예외가 발생합니다.한 가지 간단한 해결책은 이 모든 것을 그 상태로 포장하는 것이다.if(s.length()<n)
당신의 안에서else
절에서는 String 전체를 인쇄/반환할지 아니면 다른 방법으로 처리할지를 선택할 수 있습니다.
Apache Commons는 나를 놀라게 했다.StringUtils.abbreviate(String str, int maxWidth)
덧붙여 「...」는, 포스트픽스를 변경하는 옵션은 없습니다. WordUtils.abbreviate(String str, int lower, int upper, String appendToEnd)
다음 빈 공간을 찾습니다.
이건 여기 두고 갈게요.
public static String abbreviate(String s, int maxLength, String appendToEnd) {
String result = s;
appendToEnd = appendToEnd == null ? "" : appendToEnd;
if (maxLength >= appendToEnd.length()) {
if (s.length()>maxLength) {
result = s.substring(0, Math.min(s.length(), maxLength - appendToEnd.length())) + appendToEnd;
}
} else {
throw new StringIndexOutOfBoundsException("maxLength can not be smaller than appendToEnd parameter length.");
}
return result;
}
언급URL : https://stackoverflow.com/questions/1583940/how-do-i-get-the-first-n-characters-of-a-string-without-checking-the-size-or-goi
'programing' 카테고리의 다른 글
Vue.js - "속성 또는 메서드가 정의되어 있지 않습니다"에 대한 v-.js (0) | 2022.07.10 |
---|---|
x264 C API를 사용하여 일련의 이미지를 H264로 인코딩하려면 어떻게 해야 합니까? (0) | 2022.07.06 |
Vue.js 앱을 컨테이너화하는 방법 (0) | 2022.07.05 |
vuex 스토어에서 상태를 지우려면 어떻게 해야 합니까? (0) | 2022.07.05 |
Vue에서 이전 페이지 활성 유지 (0) | 2022.07.05 |