2013-06-04 3 views
0

사용자가 입력 한 7 자의 영숫자 코드를 읽는 스캐너가 있습니다. String 변수는 "코드"라고합니다.문자열 정수 비교 문제

코드의 마지막 문자 (7 번째 문자, 6 번째 색인)는 숫자 여야하며 나머지는 숫자 또는 알파벳 일 수 있습니다.

그래서 코드의 마지막 문자가 숫자 (0-9) 인 경우 나머지 메서드가 실행되지 않도록하는 캐치를 수행해야했습니다.

그러나 내 코드는 내 코드가 0에서 9 사이의 정수로 끝나는 경우에도 if 문이 충족되고 "마지막 문자가 숫자가 아닙니다"라는 메시지를 보면서 예상대로 작동하지 않습니다.

예제 코드 : 예상대로 45m4av7

CharacterAtEnd는 문자열 문자 (7)로 출력한다 그러나 내 프로그램은 여전히 ​​내 코드가 아닌 숫자로 끝나는 알려줍니다 내 숫자 값이 문자열 것을 알고 있어요.. 문자,하지만 그것은 중요해야합니까? 또한 분명히 실제 정수 값을 "|", 왜 Strin 사용하여 메신저를 비교할 수 없습니다. g.valueOf를 사용하고 0-9의 문자열 문자를 사용합니다. 내 프로그램은 나에게 내 코드 (즉 끝에 7가) 말하고 왜 내 인생에 대한 알아낼 수 없습니다

String characterAtEnd = String.valueOf(code.charAt(code.length()-1)); 
System.out.println(characterAtEnd); 

if(!characterAtEnd.equals(String.valueOf(0|1|2|3|4|5|6|7|8|9))){ 
    System.out.println("INVALID CRC CODE: last character in code in non-numerical."); 
    System.exit(0); 

이 아닌 숫자로 끝납니다. if 문을 건너 뛰고 계속 진행해야합니다. 권리?

+0

정규식을 사용해보십시오. [Link] (http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/) – SaintLike

+0

질문에 프로그래밍 언어를 사용하십시오. – Barmar

+0

http://stackoverflow.com/questions/1223052/how-do-i-find-out-if-first-character-of-a-string-is-a-number –

답변

0

Stringcontains 방법은 여기에 작동합니다

String digits = ""; 
digits.contains(characterAtEnd); // true if ends with digit, false otherwise 

String.valueOf(0|1|2|3|4|5|6|7|8|9) 실제로 물론 마지막 문자와 동일 할 수 없다 "15"이다. 0|1|2|3|4|5|6|7|8|9은 정수 수학을 사용하여 15로 평가되므로 문자열로 변환됩니다.

또는

,이 시도 :

String code = "45m4av7"; 
char characterAtEnd = code.charAt(code.length() - 1); 
System.out.println(characterAtEnd); 

if(characterAtEnd < '0' || characterAtEnd > '9'){ 
    System.out.println("INVALID CRC CODE: last character in code in non-numerical."); 
    System.exit(0); 
} 
+0

"or"라고 말할 수 있습니다. 정수를 사용하는 if 문? if (어떤 것이든지 (1 또는 2 또는 3 또는 4 또는 5)) { 다음이 작업을 수행하십시오. } 도움을 주셔서 대단히 감사합니다! – SmashAdams

+1

언어'||'는 부울의 논리적 조합을 위해 예약되어 있습니다. 그래서 당신은'characterAtEnd.equals ("0") || characterAtEnd.equals ("1") || ... ' –

+0

그래서 물류 또는 접근 방식을 선택했습니다. 나는 받아 들인 모든 끝 문자 집합을 만들고, 마지막 문자가 받아 들일 수있는 집합에 있는지 검사하고, 다른 것이면 거짓을 반환합니다. 또는을 명시 적으로 사용하지 않고 OR 논리를가집니다. –

0

을 현재 비트 연산을하고있다 : if(!characterAtEnd.equals(String.valueOf(0|1|2|3|4|5|6|7|8|9)))

체크 아웃 |||

의 차이는 코드의이 비트는 정기적으로 사용하여 작업을 수행한다 표현식 :

String code = "45m4av7"; 

if (!code.matches("^.+?\\d$")){ 
    System.out.println("INVALID CRC CODE"); 
} 

는 또한, 참조를 위해,이 방법은 때때로 비슷한 상황에서 유용 : 당신은 가능한 모든 소문자 알파벳 값을 통과하기를 원한다면 .endswith(suffix)으로

/* returns true if someString actually ends with the specified suffix */ 
someString.endsWith(suffix); 

는 정규 표현식을하지 않습니다, 당신은 필요한 것

/* ASCII approach */ 
String s = "hello"; 
boolean endsInLetter = false; 
for (int i = 97; i <= 122; i++) { 
    if (s.endsWith(String.valueOf(Character.toChars(i)))) { 
     endsInLetter = true; 
    } 
} 
System.out.println(endsInLetter); 

/* String approach */ 
String alphabet = "abcdefghijklmnopqrstuvwxyz"; 
boolean endsInLetter2 = false; 
for (int i = 0; i < alphabet.length(); i++) { 
    if (s.endsWith(String.valueOf(alphabet.charAt(i)))) { 
     endsInLetter2 = true; 
    } 
} 
System.out.println(endsInLetter2); 

앞서 언급 한 접근 방식 중 어느 것도 좋은 생각이 아닙니다. 이는 어설프고 오히려 비효율적입니다.아스키 방식의 떨어져가는

, 당신은 같은 것을 할도 수 :

ASCII 참조 : 당신이 한 줄을 원하는 경우에 http://www.asciitable.com/

int i = (int)code.charAt(code.length() - 1); 

/* Corresponding ASCII values to digits */ 
if(i <= 57 && i >= 48){ 
    System.out.println("Last char is a digit!"); 
} 

, 예를 들어, 정규 표현식에 충실 :

System.out.println((!code.matches("^.+?\\d$")? "Invalid CRC Code" : "Valid CRC Code")); 

이 정보가 도움이되기를 바랍니다.

+0

안녕하세요! 귀하의 회신에 감사드립니다. 내가 언급 한 .endsWith 메서드를 사용해 보았는데 제대로 작동하는 것 같습니다. 내 유일한 관심사는 알파벳의 각 글자에 대해 코드 줄을 26 번 붙여 넣어야 할 것처럼 보인다는 것입니다. 반면에 "코드가 a 또는 b 또는 c 또는 d ...로 끝나는 지 ..."라고 말할 수 있으면 좋겠지 만 "잘못된 코드"를 인쇄하십시오. 그래서 하나의 if 문에서 모두 멋지게 표현할 수 있습니다. 또한, 괄호 안의 항목이 개별적으로 또는 전체적으로 보이는 경우 .matches 메서드가 궁금합니다. – SmashAdams

+0

불행히도 endswith (접미사)는 (내 지식에) 정규 표현식을 사용하지 않으며 if 당신은 알파벳의 모든 문자를 확인하기를 원했을 때 루프를 사용할 수 있었지만 (clunky했을지라도) .matches 메소드에 관해서는 마지막 항목에서 십진수인지 확인했다. 당신을 돕기 위해 내 글을 수정했습니다. =) 행운을 빌어 요! –