0-9가 아닌 모든 문자와 문자를 제거하려고합니다. 나는 사용하고 Character.isDigit()
있지만 소수점도 제거합니다. 소수도 어떻게 유지할 수 있습니까?
0-9가 아닌 모든 문자와 문자를 제거하려고합니다. 나는 사용하고 Character.isDigit()
있지만 소수점도 제거합니다. 소수도 어떻게 유지할 수 있습니까?
답변:
이 코드를 사용해보십시오 :
String str = "a12.334tyz.78x";
str = str.replaceAll("[^\\d.]", "");
이제 str
가 포함 "12.334.78"
됩니다.
[^\\d.-]
"1233478"
.
정규식을 사용합니다.
String text = "-jaskdh2367sd.27askjdfh23";
String digits = text.replaceAll("[^0-9.]", "");
System.out.println(digits);
인쇄물
2367.2723
-
음수도 유지 하고 싶을 수도 있습니다 .
^
와 .
의미에 대해 설명해 주 시겠습니까?
[^
이러한 문자하지 수단과 내부 []
a는 .
단지입니다.
.
는 단지 a
의미 가 있고 아무 의미가 없으므로 제거 할 수 있습니까?
.
는 결과에 s 를 원하지 않는 경우에만 가능합니다 .
String phoneNumberstr = "Tel: 00971-557890-999";
String numberRefined = phoneNumberstr.replaceAll("[^\\d-]", "");
결과 : 0097-557890-999
문자열에 "-"가 필요하지 않은 경우 다음과 같이 할 수 있습니다.
String phoneNumberstr = "Tel: 00971-55 7890 999";
String numberRefined = phoneNumberstr.replaceAll("[^0-9]", "");
결과 : 0097557890999
구아바로 :
String input = "abx123.5";
String result = CharMatcher.inRange('0', '9').or(CharMatcher.is('.')).retainFrom(input);
http://code.google.com/p/guava-libraries/wiki/StringsExplained를 참조하십시오 .
str = str.replaceAll("\\D+","");
printf()
이 중복 임을 가리키는 것과 같습니다 . 또한 의견에 답변이 표시되면 mod에게 답변으로 변환하거나 직접 답변을 추가하도록 요청할 수 있습니다-의견에 대한 답변은 StackOverlow에서 권장되지 않습니다.
정규식을 사용하지 않는 간단한 방법 :
점에 대한 문자 확인을 추가 '.'
하면 요구 사항이 해결됩니다.
public static String getOnlyNumerics(String str) {
if (str == null) {
return null;
}
StringBuffer strBuff = new StringBuffer();
char c;
for (int i = 0; i < str.length() ; i++) {
c = str.charAt(i);
if (Character.isDigit(c) || c == '.') {
strBuff.append(c);
}
}
return strBuff.toString();
}
Java 8 스트림으로 바꾸는 방법 :
public static void main(String[] args) throws IOException
{
String test = "ab19198zxncvl1308j10923.";
StringBuilder result = new StringBuilder();
test.chars().mapToObj( i-> (char)i ).filter( c -> Character.isDigit(c) || c == '.' ).forEach( c -> result.append(c) );
System.out.println( result ); //returns 19198.130810923.
}
통화 소수점 구분 기호는 로캘과 다를 수 있습니다. .
항상 분리 자로 간주 하는 것은 위험 할 수 있습니다 . 즉
╔════════════════╦═══════════════════╗
║ Currency ║ Sample ║
╠════════════════╬═══════════════════╣
║ USA ║ $1,222,333.44 USD ║
║ United Kingdom ║ £1.222.333,44 GBP ║
║ European ║ €1.333.333,44 EUR ║
╚════════════════╩═══════════════════╝
올바른 방법은 다음과 같습니다.
DecimalFormatSymbols
기본 로케일 또는 지정된 하나 를 통해 10 진수 문자를 가져 옵니다.그리고 여기 내가 어떻게 해결하고 있습니까?
import java.text.DecimalFormatSymbols;
import java.util.Locale;
암호:
public static String getDigit(String quote, Locale locale) {
char decimalSeparator;
if (locale == null) {
decimalSeparator = new DecimalFormatSymbols().getDecimalSeparator();
} else {
decimalSeparator = new DecimalFormatSymbols(locale).getDecimalSeparator();
}
String regex = "[^0-9" + decimalSeparator + "]";
String valueOnlyDigit = quote.replaceAll(regex, "");
try {
return valueOnlyDigit;
} catch (ArithmeticException | NumberFormatException e) {
Log.e(TAG, "Error in getMoneyAsDecimal", e);
return null;
}
return null;
}
도움이 되길 바랍니다. '
Kotlin을 위해 여기에 오는 Android 사람들을 위해
val dirtyString = "💰 Account Balance: $-12,345.67"
val cleanString = dirtyString.replace("[^\\d.]".toRegex(), "")
산출:
cleanString = "12345.67"
이 후 안전하게 변환 할 수 있습니다 toDouble()
, toFloat()
또는 toInt()
경우에 필요
널 입력, 음수 및 소수를 처리합니다 (프로젝트에 Apache Commons Lang 라이브러리 버전 3.8 이상을 포함해야 함).
import org.apache.commons.lang3.RegExUtils;
result = RegExUtils.removeAll(input, "-?[^\\d.]");
라이브러리 참조 : https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/RegExUtils.html