Java-문자열의 첫 문자 제거


215

Java에는 문자열이 있습니다.

Jamaica

문자열의 첫 번째 문자를 제거하고 반환하고 싶습니다 amaica

어떻게해야합니까?

답변:


341

substring()인수가 있는 함수를 사용하여 1위치 1 ( 첫 번째 문자 )에서 문자열 끝까지 하위 문자열을 가져옵니다 (두 번째 인수는 기본적으로 문자열의 전체 길이).

"Jamaica".substring(1);

21
이것은 실제로 문자열에서 문자를 제거 하지는 않습니다 . 첫 번째 문자열을 제외한 이전 문자열의 모든 문자가 포함 된 새 문자열을 제공합니다. 실제로 문자열을 수정하는 방법은 없습니다.
Chris Dodd

링크가 더 이상 유효하지 않은 것 같습니다. 대신 다음 링크를 시도하십시오. substring (int)
Christian Hoffmann

1
예, 문자열 변수의 처음 n자를 제거하려면 다음을 수행하십시오. variable = variable.substring (n);
Mitulát báti

67
public String removeFirstChar(String s){
   return s.substring(1);
}

12
새 함수를 정의하려면 적어도 적합한 이름을 선택하십시오 removeFirst().
moinudin


47

Java에서는 선행 문자가 특정 문자 인 경우에만 제거하십시오.

Java 3 진 연산자를 사용하여 제거하기 전에 캐릭터가 있는지 빠르게 확인하십시오. 이것은 선행 문자가 존재하는 경우에만 선행 문자를 제거하고, 빈 문자열을 전달하면 공백 문자열을 리턴합니다.

String header = "";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

header = "foobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

header = "#moobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);

인쇄물:

blankstring
foobar
moobar

Java, 문자열 어디에서나 문자의 모든 인스턴스를 제거하십시오.

String a = "Cool";
a = a.replace("o","");
//variable 'a' contains the string "Cl"

자바, 문자열의 어느 곳에서나 문자의 첫 번째 인스턴스를 제거하십시오.

String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"

4
건조 :header = header.substring(header.startsWith("#") ? 1 : 0);
Aaron Blenkush

3
또는 정규 표현식으로 :header = header.replaceFirst("^#","");
Aaron Blenkush

18

시작 색인 만 사용하고 지정된 색인의 문자로 시작하고 문자열의 끝까지 확장되는 하위 문자열을 리턴 하는 클래스 의 하위 문자열 메소드를 사용할 수 있습니다 String.

String str = "Jamaica";
str = str.substring(1);


11

Java에서 이해해야 할 핵심은 문자열이 변경 불가능하다는 것입니다. 변경할 수는 없습니다. 따라서 '문자열에서 문자 제거'에 대해 말하는 것은 의미가 없습니다. 대신 원하는 문자만으로 새로운 문자열을 만듭니다. 이 질문의 다른 게시물에는 다양한 방법이 있지만 원래 문자열이 변경되지 않는다는 것을 이해하는 것이 중요합니다. 이전 문자열에 대한 참조는 이전 문자열을 계속 참조하며 (다른 문자열을 참조하도록 변경하지 않는 한) 새로 작성된 문자열의 영향을받지 않습니다.

이것은 성능에 많은 영향을 미칩니다. 문자열을 '수정'할 때마다 실제로 모든 오버 헤드가 암시 된 (메모리 할당 및 가비지 수집) 새 문자열을 만듭니다. 따라서 문자열을 일련의 수정하고 최종 결과에만 신경을 쓰려면 (중간 문자열은 '수정'하자마자 죽을 것입니다) 대신 StringBuilder 또는 StringBuffer를 사용하는 것이 좋습니다.


9

당신은 이렇게 할 수 있습니다 :

String str="Jamaica";
str=str.substring(1, title.length());
return str;

또는 일반적으로 :

public String removeFirstChar(String str){
   return str.substring(1, title.length());
}

8

substring () 메서드는이 시퀀스에 현재 포함 된 문자의 하위 시퀀스 를 포함하는 새 문자열을 반환합니다.

문자열은 지정된에서 시작 start하고있는 문자 확장 index end - 1.

두 가지 형태가 있습니다. 첫 번째는

  1. String substring(int FirstIndex)

여기서 FirstIndex는 하위 문자열이 시작될 인덱스를 지정합니다. 이 형식은 FirstIndex에서 시작하여 호출 문자열의 끝까지 실행되는 하위 문자열의 복사본을 반환합니다.

  1. String substring(int FirstIndex, int endIndex)

여기서 FirstIndex는 시작 색인을 지정하고 endIndex는 중지 지점을 지정합니다. 반환 된 문자열에는 시작 색인부터 끝 색인까지의 모든 문자가 포함됩니다.

    String str="Amiyo";
   // prints substring from index 3
   System.out.println("substring is = " + str.substring(3)); // Output "yo'

4

첫 번째 문자뿐만 아니라 첫 번째 문자 #집합 을 제거 해야하는 상황을 겪었습니다 .

String myString = ###Hello World시작점이 될 수 있지만 Hello World. 이것은 다음과 같이 수행 할 수 있습니다.

while (myString.charAt(0) == '#') { // Remove all the # chars in front of the real string
    myString = myString.substring(1, myString.length());
}

OP의 경우로 교체 while하면 if정상적으로 작동합니다.


1
문자열이 어느 시점에서 범위를 벗어 났기 때문에 myString == "#"인 경우 문제가 발생합니다. 이를 방지하기 위해 (! myString.isEmpty () && myString.charAt (0))
Christian

2

또 다른 해결책은 다음 replaceAll과 같은 정규 표현식 ^.{1}( regex demo )을 사용하여 문제를 해결할 수 있습니다 .

String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica

1

하나 또는 여러 개의 선행 문자를 제거하는 내 버전. 예를 들어, 문자열 str1 = "01234"는 선행 '0'을 제거 할 때 결과는 "1234"입니다. 문자열 str2 = "000123"의 경우 결과는 다시 "123"입니다. 그리고 문자열 str3 = "000"의 경우 결과는 빈 문자열입니다 : "". 이러한 기능은 숫자 문자열을 숫자로 변환 할 때 종종 유용합니다. 정규식 (replaceAll (...))에 비해이 솔루션의 장점은이 문자열이 훨씬 빠르다는 것입니다. 많은 수의 문자열을 처리 할 때 중요합니다.

 public static String removeLeadingChar(String str, char ch) {
    int idx = 0;
    while ((idx < str.length()) && (str.charAt(idx) == ch))
        idx++;
    return str.substring(idx);
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.