2012-05-01 3 views

답변

2

정규 표현식을 사용할 수 있습니다. 예를 들어 모든 숫자 (또는 마이너스/플러스 기호, 숫자)이면 int입니다. 각 유형에 대해 정규 표현식을 사용하고 차례로 사용해보십시오. 그것이 int가 아니면 float인지 확인하십시오. float가 아닌 경우 날짜인지 확인합니다. 등등. 모든 검사가 실패하면 문자열입니다.

무작위로 항목을 구문 분석하고 예외를 발생시키지 않는 것을 시도하는 무차별 대입 방식을 시도해 볼 수는 있지만 좋은 생각은 아닙니다.

+0

나는 pregmatch로이 일을했다. –

0

당신이 원하는 것은 완벽하게 불가능합니다. 예를 들어 질문에서 3.123123은 String, float 또는 double 일 수 있습니다.

이중으로 보이는 모든 것을 double로 변환하고, 그 외 모든 것은 long으로 길게, 그 외 모든 것은 부울로 부울로, 그 외 모든 것은 날짜 및 기타 모든 문자를 문자열로 변환합니다. 그렇게하기 위해 BufferedReader.readLine 또는 Scanner.next (공백, 탭 등 줄 바꿈뿐만 아니라 줄 바꿈)를 사용하여 다음 내용을 읽은 다음 Long.parseLong 같은 정적 메서드를 try ... catch 블록을 사용하여 구문 분석 오류를 감지합니다 (예 : 길이가 길지 않은 경우). 예 :

String thing = bufferedReader.readLine(); 
long longValue; 
boolean looksLikeALong = false; 
try { 
    longValue = Long.parseLong(thing); 
    looksLikeALong = true; 
} catch (NumberFormatException e) {} 
0

나는 지금까지 시도한 것이나 효과가없는 것이나 사고 과정이 무엇인지보고 싶습니다.

매우 열심히 생각하지 않고이를 해결할 수있는 몇 가지 방법이 있습니다. 그 중 일부는 instanceof를 사용하거나 parseInt, parseLong 등의 일부 구문 분석 메소드를 사용하여 정규 표현식을 사용합니다.

1

마술 솔루션이 없습니다. 입력 내용을 한 줄씩 파싱하고 분석해야합니다.

Integer.parseInt(s)

을 사용할 수 있습니다 정수를 구별 ParsingException가 발생하지 않는 한 데이터가 정수라고 가정합니다. Double에 대해서도 마찬가지입니다. 날짜가 다른 형식으로 나타날 수 있기 때문에 날짜가 문제 일 수 있습니다.

내가 귀하의 경우 단순화하기에 당신이 패턴을 사용하는 것이 좋습니다 코드를 생각 : 당신은 완벽한 솔루션을 구현하려면

Pattern[] patterns = Pattern[] {Pattern.compile("^\\d+$"), Pattern.compile("^\\d+\\.\\d*$"), Pattern.compile("^\\d{1,2}/\\d{1,2}/\\d{1,2}$")}; 
Class<?> types = new Class[] {Integer.class, Double.class, Date.class}; 
for (int i - 0; i < patterns.length; i++) { 
    if (patterns[i].matches(str)) { 
     return types[i]; 
    } 
} 
return null; 
0

을, 모든 정의 문법을 소요 파서를 작성해야 텍스트 파일에 나타날 수있는 데이터 유형. 복잡한 데이터 유형과 일치시키지 않으려는 경우 정규 표현식 일치도 도움이됩니다.

관련 문제