문자열 크기에 관계없이 Java에서 문자열의 마지막 문자를 얻는 방법


80

크기에 관계없이 문자열에서 마지막 문자를 가져 오는 방법을 찾고 있습니다. 다음 문자열을 예로 들어 보겠습니다.

"abcd: efg: 1006746"
"bhddy: nshhf36: 1006754"
"hfquv: nd: 5894254"

보시다시피 완전히 임의의 문자열이지만 끝에 7 개의 숫자가 있습니다. 7 개의 숫자를 어떻게 얻을 수 있을까요?

편집하다:

나는 String[] string = s.split(": ");숫자에 대해 string [2]를 호출하고 중간에있는 것에 대해서는 string [1]을 호출하는 한 그것이 여기서 훌륭하게 작동 한다는 것을 깨달았습니다 .


귀하의 질문에 여러 답변 모두 언급 String.split()하지만, 그 주목할 가치가 s.split(": ")새로운 컴파일 것입니다 java.uitl.regex.Pattern정규식을 만들고, 그 패턴을 사용하여 문자열과 일치하는, 당신이 그것을 호출 할 때마다 Matcher그리고 ArrayList전에 String[]반환됩니다. 상대적으로 느리고이 문제를 해결하는 데 필요한 것보다 훨씬 많은 것을 할당합니다. 이것이 중요한지 여부는 애플리케이션의 특성에 따라 다릅니다. 나는 split()정말로 필요 하지 않는 한 일반적으로 피 합니다. ( 단일 문자로 분할하는 경우 정규식을 사용 split()하지 않습니다 .)
rjb1290

답변:


104

할 수있는 일이 많습니다.

s.substring(s.lastIndexOf(':') + 1);

마지막 콜론 이후의 모든 것을 얻습니다.

s.substring(s.lastIndexOf(' ') + 1);

마지막 공간 이후의 모든 것.

String numbers[] = s.split("[^0-9]+");

모든 숫자 시퀀스를 분리합니다. 숫자 배열의 마지막 요소는 아마도 원하는 것입니다.


4
lastIndexOf접근 방식 의 우연한 측면 중 하나 는 공백 이 없으면lastIndexOf -1을 반환하므로 전체 문자열 ( s.substring(0))로 끝납니다 .
Jon Skeet

s.substring (s.lastIndexOf ( ':') + 1); 나는 그것을 사용하고 싶지만 첫 번째 콜론 다음에 문자를 어떻게 얻을 수 있습니까? s.indexOf ( ":", 1) 아닌가요?
PuppyKevin

144

어때 :

String numbers = text.substring(text.length() - 7);

즉이 있다고 가정 이다 (7 개) 문자는 물론, 마지막에. "12345"를 전달하면 예외가 발생합니다. 다음과 같이 해결할 수 있습니다.

String numbers = text.substring(Math.max(0, text.length() - 7));

또는

String numbers = text.length() <= 7 ? text : text.substring(text.length() - 7);

이것은 결과 문자열에 숫자가 포함되어 있다는 유효성 검사를 수행하지 않으며 textnull 인 경우에도 예외 가 발생합니다 .


54

이 질문은 "Java String Right"에 대한 Google의 상위 결과입니다.

놀랍게도 아무도 아직 Apache Commons StringUtils.right ()에 대해 언급하지 않았습니다 .

String numbers = org.apache.commons.lang.StringUtils.right( text, 7 );

이것은 또한 text다른 많은 답변이 NullPointerException을 던지는 경우 가 null 인 경우를 처리합니다 .


1
나도 궁금해. 이 방법은 가능한 모든 문제를 처리하는 것보다 훨씬 안전합니다.
Jaroslav Kuboš

이것은 또한 무언가를 문자열로 안전하게 변환하고 마지막 n문자에 도달하기 위해 단일 표현식을 원하거나 필요로 할 때 작동하는 유일한 대답입니다 . 예를 들어 StringUtils.right(Objects.toString(someObj), 7).
rjb1290

23

이 코드는 완벽하게 작동합니다.

String numbers = text.substring(Math.max(0, text.length() - 7));

7

다음 한 줄 코드를 사용하여 달성 할 수 있습니다 .

String numbers = text.substring(text.length() - 7, text.length());

그러나 입력 문자열 길이가 7 미만인 경우 예외포착 해야합니다 .

마지막 'N'문자를 얻으려면 7을 N과 같은 숫자로 바꿀 수 있습니다.


1
입력 길이가 7 이상인지 미리 확인한 다음 부분 문자열을 수행하는 것이 좋습니다.
orique

4

String.split또는 정규식을 사용합니다 .


String.split 사용

String[] numberSplit = yourString.split(":") ; 
String numbers = numberSplit[ (numberSplit.length-1) ] ; //!! last array element

RegEx 사용 (필요 import java.util.regex.*)

String numbers = "" ;
Matcher numberMatcher = Pattern.compile("[0-9]{7}").matcher(yourString) ;
    if( matcher.find() ) {
            numbers = matcher.group(0) ;
    } 

2
정규식은 마지막 7 자리 [0-9]{7}$와 일치하는지 확인해야합니다 .
whiskeysierra 2010-07-14

@ Willi Schönborn : 동의합니다. OP의 경우는 문자열의 다른 그룹이 항상 문자를 포함한다고 제안했습니다. 나는 경계를 지정할 필요가 없다고 가정했습니다.
FK82

2
String inputstr = "abcd: efg: 1006746"
int startindex = inputstr.length() - 10;
String outputtendigitstr = inputstr.substring(startindex);

문자열 길이가 10 이상인지 확인하십시오.



1

StringUtils.substringAfterLast ( "abcd : efg : 1006746", ":") = "1006746";

문자열의 형식이 고정되어있는 한 substringAfterLast 를 사용할 수 있습니다 .



0

예 : "abcd : efg : 1006746" "bhddy : nshhf36 : 1006754" "hfquv : nd : 5894254"

-1 단계: String firstString = "abcd: efg: 1006746";

-2 단계: String lastSevenNumber = firstString.substring(firstString.lastIndexOf(':'), firstString.length()).trim();

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.