2013-03-08 4 views
-4

Java 프로그램을 작성한 후 1,2,5,2,11과 같은 문자열에서 int[]을 얻으려고합니다.사용자 입력 유효성을 검사하는 정규식

하지만 먼저 사용자가 ","+ 숫자와 같은 올바른 형식을 입력했는지 판단해야합니다. 이것을 어떻게 Java 정규 표현식으로 작성할 수 있습니까?

//set the default value of int[] a; 
     int[] a = {2,3,1,-2,2,7}; 
     //set the UI; 
     String text = JOptionPane.showInputDialog("please enter the array to be checked: "); 
     String[] strs = text.split(","); 
     System.out.println(strs); 
     System.out.println(strs.length); 
     int[] a2 = new int[strs.length]; 
     for(int i = 0; i < strs.length; i++){ 
      a2[i] = Integer.parseInt(strs[i]); 
     } 

는 얘들 아, 분명히 처음을하지 미안, 나는 + 어떤 양 또는 음의 자리 ","사용자가 같은 형식을 입력합니다, 그냥 "1처럼 공간이 허용 될 수 있습니다 -2, 1,3, + 55 "

+0

귀하의 경우에 적합한 형식은 무엇입니까? – VladL

+4

지금까지 시도한 것을 보여줄 수 있습니까? – corsiKa

+1

우선 스택 오버플로를 환영합니다. 미래에는 [ask] (다시?)를 방문하고 질문하기 전에 연구에 관한 부분을 읽으십시오. Java에서 정규 표현식을 작성하는 방법에 대한 문서를 찾는 것이 어렵지 않아야합니다. 이미 시도한 내용과 어디서 구체적으로 붙어 있는지 보여 주면 도움이 될 것입니다. – slhck

답변

3

당신이

if (text.matches("-?\\d+(,\\s?-?\\d+)*")){ 
    //try to split 
}else{ 
    //inform user about wrong data format 
} 
  • -? 같은 것을 사용하여 입력 내용을 확인하려면은 "
  • ,\\s?-?\\d+
  • 는"쉼표 "를 의미, 마이너스
  • \\d+ 하나 이상의 숫자를 의미 선택적임을 공백을 의미 "(하나 또는 없음),"빼기 부호 "(하나 또는 없음),"숫자 "(하나 이상),
  • (,\\s?-?\\d+)*은이 구조가 app 귀는 0 번 이상.
+0

' "\\ d + (, \\ d +) *"'는'123,4,5,67890'을 허용합니다. –

+1

@MattBall 예. OP가 '1,2,5,2,11'을 사용했기 때문에 그 숫자는 하나 이상의 숫자라고 가정했습니다. 거기에 문제가 있습니까? 내가 놓친 게 있니? – Pshemo

+0

나는 쉼표가 분리 된 숫자의 범위를 정한다는 것을 추론했다. –

5

String#split(",")Integer#parseInt()의 경우 정규식이 필요하지 않습니다.

Regex만으로는 문자열을 숫자로 바꾸기에 충분하지 않습니다.

+0

OP는 먼저 정규식을 사용하여 사용자 입력의 유효성을 검사하려고했습니다. – slhck

+1

아마 맞 겠지만'Integer # parseInt()'가 올바른 선택이고 정규식은 아닙니다. –

+0

"99 가지 문제가있어서 정규식을 사용했습니다. 이제 100 가지 문제가 있습니다." – corsiKa

관련 문제