2016-09-14 2 views
-1

문자열이 java에서 유효한 float이고 Regex를 사용하고 싶지 않은지 확인하려고합니다. 나의 중앙에 오는 첫번째 물건은 Float.parseFloat(String)와 동등한 것 인 Float.valueOf(String)를 사용한다. 이 함수는 NumberFormatException을 던지지 않습니다.유효한 문자로 자바에서 float 구문 분석

나는 이것이 java에서 유효한 값 일 수 있음을 알고 있습니다. 그러나 다른 환경과 언어와 의사 소통하기를 원할 때 이것들은 유효하지 않습니다 !!!

System.out.println(Float.parseFloat("4.f")); 
System.out.println(Float.parseFloat("2.d")); 
System.out.println(Float.parseFloat("0.45d")); 
System.out.println(Float.parseFloat("0.3f")); 
System.out.println(Float.parseFloat("0d")); 
System.out.println(Float.parseFloat("0d")); 

결과 :

4.0 
2.0 
0.45 
0.3 
0.0 
0.0 

나는 내 자신의 파서를 쓸 수 있습니다 알고이 선행을 잡을 수있는 우아한 방법이 있지만 성능에 영향을 루프입니다. 이견있는 사람? 사전에

감사합니다 ...

+0

은 "유효"경우 : 브라질, 예를 들어, 우리는 소수점 표시로 쉼표를 사용 Java 값이 응용 프로그램에 유효하지 않습니까? – holtc

+3

로 다시 변환 당신이 문자열로 변환 할 수 –

+0

다른 언어에서 값이 유효하지 않은 경우 Java에서 오류가 발생하는 이유는 무엇입니까? 유일한 방법은 구문 분석하기 전에 문자열의 문자를 확인하는 것입니다. –

답변

0

내가 @holtc 솔루션을 가서 다른 시스템으로 의사 소통을 다시 문자열로 다음과 (당신이 자바에서 유효 알고 다음) float로 원래의 문자열을 변환 할 :

String originalString = "4.f"; 
Float floatNum = Float.parseFloat(originalString); 
String newString = floatNum.toString(); 

실제로 다른 시스템은 다른 시스템에있을 수 있고 부동 소수점에 대한 구분 기호가 있으므로 다른 세부 정보 로캘에주의해야합니다.

String originalString = "4.f"; 
Float floatNum = Float.parseFloat(originalString); 
String newString = String.format(new Locale("pt", "BR"), "%.2f", floatNum); 
youve를 완료 한 후 다음 "유효"당신의 정의를 무엇 부동
+0

Gustavo 솔루션 주셔서 감사하지만 제 경우에는 일괄 처리 문자열 매개 변수로 float 값을 전달해야합니다 및 예외를 throw합니다. 로케일은 내 문제가 아니야. – Rguroo

+0

도와 줘서 기쁩니다! 로케일에 대해 걱정하지 않는다면 다른 시스템에서 유효해야하는 형식으로 부동 소수점 숫자가있는 새로운 문자열을 얻을 때 어떤 코드 스 니펫도 사용할 수 있습니다. –

관련 문제