[java] 크기를 확인하거나 범위를 벗어나지 않고 문자열의 처음 n자를 얻으려면 어떻게합니까?

먼저 n크기 검사를 수행하지 않고 (인라인이 허용 가능) 또는 위험을 감수하지 않고 Java에서 문자열 의 첫 문자 를 어떻게 확인 IndexOutOfBoundsException합니까?



답변

깔끔한 해결책은 다음과 같습니다.

String upToNCharacters = s.substring(0, Math.min(s.length(), n));

의견 :이 솔루션은 “신선한”반면, / 를 명백한 방식으로 사용하는 솔루션보다 실제로 읽기 쉽지 않다고 생각합니다 . 독자가이 트릭을 보지 못했다 면 코드를 이해 하기더 어려워 야 합니다. IMO, 코드의 의미는 / 버전 에서 더 분명합니다 . 더 깨끗하고 읽기 쉬운 솔루션은 @paxdiablo의 답변을 참조하십시오.ifelseifelse


답변

바퀴를 재발 명하지 마십시오 … :

org.apache.commons.lang.StringUtils.substring(String s, int start, int len)

자바 독 은 말한다 :

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 에는이를위한 StringUtils.left방법이 있습니다.

String upToNCharacters = StringUtils.left(s, n);


답변

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);

이것은 많은 문자열 작성 작업을 수행 할 때 코드 흐름을 깨뜨리지 않고 (다른 답변에 대한 귀하의 의견을 바탕으로) 걱정되는 것처럼 작동합니다.


답변

String upToNCharacters = String.format("%."+ n +"s", str);

if n가 변수 인 경우 에는 끔찍 하지만 (따라서 형식 문자열을 구성해야 함) 상수 인 경우에는 분명합니다.

String upToNCharacters = String.format("%.10s", str);

문서


답변

다음과 같이 부분 문자열 방법을 사용하십시오.

int n = 8;
String s = "Hello, World!";
System.out.println(s.substring(0,n);

n이 문자열의 길이보다 크면 한 주석 작성자가 지적한 것처럼 예외가 발생합니다. 하나 개의 간단한 솔루션은 상태에서이 모든 것을 래핑하는 것입니다 if(s.length()<n)귀하의 else절, 당신은 단지 / 인쇄 전체 문자열을 반환하거나 다른 방법을 처리할지 여부를 선택할 수 있습니다.


답변

Kotlin으로 개발하기에 운이 좋으면 목표를 달성
하는 take데 사용할 수 있습니다 .

val someString = "hello"

someString.take(10) // result is "hello"
someString.take(4) // result is "hell" )))