SO에서 0을 접두사로 사용하는 방법에 대한 질문을 보았습니다. 그러나 다른 방법은 아닙니다!
영숫자 텍스트에서 선행 0을 제거하는 방법을 제안 할 수 있습니까? 내장 API가 있습니까? 또는 선행 0을 자르는 방법을 작성해야합니까?
예:
01234 converts to 1234
0001234a converts to 1234a
001234-a converts to 1234-a
101234 remains as 101234
2509398 remains as 2509398
123z remains as 123z
000002829839 converts to 2829839
답변
정규식은이 작업에 가장 적합한 도구입니다. 문제 사양에 따라 달라집니다. 다음은 선행 0을 제거하지만 필요한 경우 1을 남겨 둡니다 (즉 "0"
, 빈 문자열로 바뀌지 않습니다 ).
s.replaceFirst("^0+(?!$)", "")
^
앵커 확인 있는지 확인합니다 0+
일치되는 입력의 시작 부분입니다. (?!$)
전체가 아닌 문자열이 일치하게 될 부정적 예측을 보장합니다.
테스트 하네스 :
String[] in = {
"01234", // "[1234]"
"0001234a", // "[1234a]"
"101234", // "[101234]"
"000002829839", // "[2829839]"
"0", // "[0]"
"0000000", // "[0]"
"0000009", // "[9]"
"000000z", // "[z]"
"000000.z", // "[.z]"
};
for (String s : in) {
System.out.println("[" + s.replaceFirst("^0+(?!$)", "") + "]");
}
또한보십시오
답변
답변
정규식은 어떻습니까?
String s = "001234-a";
s = s.replaceFirst ("^0*", "");
^
문자열의 시작에 앵커 (나는 당신의 문자열이 여기에 여러 줄 수없는 상황에서 믿고있어, 그렇지 않으면 당신은 조사해야 할 수 있습니다 \A
입력의 시작이 아니라 라인의 시작을위한). 0*
수단은 0 개 이상의 0
문자를 (당신은 할 수 사용 0+
뿐만 아니라). 은 replaceFirst
단지 모든 대체 0
아무것도 시작 부분에 문자를.
바드처럼, 앞에 0의 당신의 정의가 돌려 포함되지 않습니다, 경우 "0"
(또는 "000"
빈 문자열 (합리적인 충분히 예상)로 또는 유사한 문자열) 필요한 경우, 단순히 다시 넣어 :
String s = "00000000";
s = s.replaceFirst ("^0*", "");
if (s.isEmpty()) s = "0";
답변
regExp 및 외부 라이브러리가 필요없는 명확한 방법.
public static String trimLeadingZeros(String source) {
for (int i = 0; i < source.length(); ++i) {
char c = source.charAt(i);
if (c != '0') {
return source.substring(i);
}
}
return ""; // or return "0";
}
답변
thelost의 Apache Commons 답변과 함께 가기 위해 guava 라이브러리를 사용하십시오 (Google의 범용 Java 유틸리티 라이브러리는 사소한 Java 프로젝트의 클래스 경로에 있어야 함), CharMatcher를 사용 합니다 .
CharMatcher.is('0').trimLeadingFrom(inputString);
답변
Kotlin을 사용하는 경우 필요한 유일한 코드입니다.
yourString.trimStart('0')
답변
당신은 할 수 있습니다 :
String s = Integer.valueOf("0001007").toString();