답변:
substring()
인수가 있는 함수를 사용하여 1
위치 1 ( 첫 번째 문자 뒤 )에서 문자열 끝까지 하위 문자열을 가져옵니다 (두 번째 인수는 기본적으로 문자열의 전체 길이).
"Jamaica".substring(1);
substring()
앞에서 트리밍하려는 문자 수를 사용하십시오 .
String value = "Jamaica";
value = value.substring(1);
답변 : "amaica"
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
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"
header = header.substring(header.startsWith("#") ? 1 : 0);
header = header.replaceFirst("^#","");
Java에서 이해해야 할 핵심은 문자열이 변경 불가능하다는 것입니다. 변경할 수는 없습니다. 따라서 '문자열에서 문자 제거'에 대해 말하는 것은 의미가 없습니다. 대신 원하는 문자만으로 새로운 문자열을 만듭니다. 이 질문의 다른 게시물에는 다양한 방법이 있지만 원래 문자열이 변경되지 않는다는 것을 이해하는 것이 중요합니다. 이전 문자열에 대한 참조는 이전 문자열을 계속 참조하며 (다른 문자열을 참조하도록 변경하지 않는 한) 새로 작성된 문자열의 영향을받지 않습니다.
이것은 성능에 많은 영향을 미칩니다. 문자열을 '수정'할 때마다 실제로 모든 오버 헤드가 암시 된 (메모리 할당 및 가비지 수집) 새 문자열을 만듭니다. 따라서 문자열을 일련의 수정하고 최종 결과에만 신경을 쓰려면 (중간 문자열은 '수정'하자마자 죽을 것입니다) 대신 StringBuilder 또는 StringBuffer를 사용하는 것이 좋습니다.
substring () 메서드는이 시퀀스에 현재 포함 된 문자의 하위 시퀀스 를 포함하는 새 문자열을 반환합니다.
문자열은 지정된에서 시작 start
하고있는 문자 확장 index end - 1
.
두 가지 형태가 있습니다. 첫 번째는
String substring(int FirstIndex)
여기서 FirstIndex는 하위 문자열이 시작될 인덱스를 지정합니다. 이 형식은 FirstIndex에서 시작하여 호출 문자열의 끝까지 실행되는 하위 문자열의 복사본을 반환합니다.
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'
첫 번째 문자뿐만 아니라 첫 번째 문자 #
집합 을 제거 해야하는 상황을 겪었습니다 .
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
정상적으로 작동합니다.
또 다른 해결책은 다음 replaceAll
과 같은 정규 표현식 ^.{1}
( regex demo )을 사용하여 문제를 해결할 수 있습니다 .
String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica
하나 또는 여러 개의 선행 문자를 제거하는 내 버전. 예를 들어, 문자열 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);
}