이 정규식 "((\\-)?[0-9]+(.([0-9])+)?)+"
은 각각 하나의 공백으로 구분 된 일련의 숫자와 일치해야합니다. 예 : "5 4 1 2 2.4 3 7.8"또는 "5 4 1 2 2.4 8.001 7.8". 나는 위의 예처럼이 작은 문자열을 줄 때긴 문자열을 정규식과 일치시키는 방법은 무엇입니까?
if((value+" ").matches("((\\-)?[0-9]+(.([0-9])+)?)+")){
// anything
}
건은, 그것은 완벽하게 간다 : 문자열이 내가 할 정규식과 일치하는 경우 위해서는
확인합니다. 하지만 긴 문자열의 경우 : "2000000 2000000 2000000 2000000 2000000 2000000 2000000 2000000"일치하는 경우 완벽하게 진행되지만 일치하지 않으면 최대 5 초가 걸립니다. 이것을 확인하십시오 :
String value = "2000000 2000000 2000000 2000000 2000000 2000000 2000000 2000000 h";
System.out.println("Start: "+System.currentTimeMillis());
if((value+" ").matches("((\\-)?[0-9]+(.([0-9])+)?)+")){
System.out.println("OK");
}else{
System.out.println("NOK");
}
System.out.println("End: "+System.currentTimeMillis());
이것은 최대 5 초가 걸립니다 !! 문자열의 끝에서 "h"를 제거하면 1ms 미만이 걸릴 것입니다.
아이디어가 있으십니까?
도트를 이스케이프 처리하는 것이 좋습니다. – jlordo