2013-03-18 2 views
0

재미있는 작은 Java 응용 프로그램을 프로그래밍했으며 모든 것이 잘 작동합니다. 내 문제는 내가 명령 줄 매개 변수를 구문 분석하기 위해 내 방법으로 작업 할 때, 나는 훨씬 더 효율적인 방법이 있어야한다고 생각했다. 내 프로그램은 다음을 허용합니다.효율적인 명령 행 구문 분석

-l (I는 새로운 하한에 대한 정수입니다.) -u I (I는 새로운 상한에 대한 정수입니다) -? 내 코드는 모두 잘 작동

private static void parseArgs(String[] arguments) { 

String t = ""; 

for (int c = 0; c < arguments.length; c++) t += arguments[c]; 

if (t.contains("-")) { 
    String[] params = t.split("-"); 
    for (int c = 0; c < params.length; c++) params[c] = params[c].trim(); 

    for (int c = 0; c < params.length; c++) { 
    if (params[c].startsWith("?") && !docOnly) { 
     docOnly = true; 
     printHelp(); 
    } 
    if (params[c].startsWith("l") && startPoint == 1) { 
     try { 
     startPoint = Integer.parseInt(params[c].substring(1)); 
     if (startPoint < 0) { 
      startPoint = 0; 
     } 
     } catch (NumberFormatException e) { 
     error = true; 
     System.out.println("\tParameter Error: " + params[c]); 
     } 
    } 
    if (params[c].startsWith("u") && endPoint == 1000) { 
     try { 
     endPoint = Integer.parseInt(params[c].substring(1)); 
     if (endPoint < 0) { 
      endPoint = 1000; 
     } 
     } catch (NumberFormatException e) { 
     error = true; 
     System.out.println("\tParameter Error: " + params[c]); 
     } 
    } 
    if (params[c].startsWith("v") && !verbose) { 
     verbose = true; 
    } 
    } 
} else { 
    error = true; 
    System.out.println("\tError in Parameters. Use -? for available options."); 
} 
} 

내가 말했듯이 : (출력 사용할 수있는 명령 줄 옵션) -v는 (메인 클래스에 대한 자세한 정보 출력을 활성화는)

나는 다음과 같은 방법으로 내 parseArgs 방법을 구현 확인하려면 take a look at it 수 있습니다. 필자는 전문적이든 아니든 다른 프로그래머들이 변수 수와 매개 변수 순서를 전달하고이를 정확하게 파싱하는 효율적인 코드 패쓰를 사용하는 상황에 어떻게 대처할 것인지 궁금합니다. 나는 내 것이 최고가 아니라는 것을 알고있다. 그래서 나는 궁금해하고있다. 어떤 언어로도 대답이 될 것입니다. 나는 프로 시저에 궁금합니다. 나는 조금 더 배우기 위해 필요한 모든 언어를 적용 할 수 있습니다.

미리 감사드립니다. ~ 데이비드 콜린스

+1

이 질문은 codereview.se에 더 적합합니다. –

답변

1
String t = ""; 
for (int c = 0; c < arguments.length; c++) t += arguments[c]; 

대신 StringBuilder를 사용합니다. 또는 더 쉽게, join() 많은 인기있는 라이브러리 중 하나에 의해 제공됩니다.


if (t.contains("-")) { 
    String[] params = t.split("-"); 

더 나은 :

String[] params = t.split("-"); 
if (params.length > 1) { 

그 특정 사건에 대한 작동하지만 (인수가 음수가 아닌 정수), 일반적으로는 문제가 될 것입니다. 사용자가 my-log.txt이라는 로그 파일을 요청할 수 있도록 매개 변수 시작 부분에서만 -을 찾아야합니다.


startPoint = Integer.parseInt(params[c].substring(1)); 
if (startPoint < 0) { 
    startPoint = 0; 
} 

모든 - 징후가 split에 의해 먹게되었다, 그래서 startPoint < 0 사실이 없을 것.


왜 숫자가 아닌 데이터에 대한 오류 플래그, 자동 범위 또는 반복 인수에서 숫자를 무시 설정합니까?

+0

나는 감사합니다. 감사합니다. 나는 심지어 하이픈이 합법적 인 주장이 될지 고려하지도 않았다. 어떻게 든 분할 ("-") 방법이 약간 다르게 작동한다는 것을 내 머리 속에서 알게되었습니다. 유효한 매개 변수로 시작한 문자열에 대해 args [] 배열을 스캔하여 인덱스 + 1 값과 결합하여 문자열을 분석하는 것을 고려했습니다. 아마 더 나은 해결책이 될 것입니까? –