2014-04-22 5 views
0

내 Java 응용 프로그램으로 탭으로 구분 된 텍스트 파일 (Excel에서 내 보낸 파일)을 읽었지만 원하지 않는 잘못된 문자가 파일에 포함되어있을 수 있습니다. 이러한 문자가 표시 예를 들어, 스프레드 시트에서 내가 본 (I 스프레드 시트를 생성하지 않음) : 탭으로 쇼를 구분 유효하지 않은 문자 감지

� 

는 :

이 분명히 유니 코드 문자입니다 '교체 문자'. 가져 오기를 중단 할 수 있도록 Java 문자열에서이 문자를 어떻게 검색합니까?

String invalidString = "1234 � test2" 
+9

"유효한"문자로 생각되는 부분은 무엇입니까? –

+0

아스키 값을 확인할 수 있습니다 –

+0

@LoganMurphy : Ascii? 당신은 UTF-8 코드 포인트를 의미합니까? – tilpner

답변

1

이 질문에 대한 대답은 잘못된 문자로 이해하는 내용에 따라 다릅니다.

ASCII 절단

간단한 검사 코드 포인트가 일정 범위 내에 있는지 확인하는 것입니다. 가장 낮은 인쇄 가능 문자는 공백입니다. 십진법 값은 32입니다. 가장 높은 ASCII 문자는 ~이고 십진수 값은 126입니다. 이것은 인쇄 가능한 ASCII 문자의 범위로 자르므로 액센트 또는 유사 문자를 사용하는 모든 사람에게 좋지 않습니다.

인쇄 적성

또 다른 방법은 캐릭터가 특정 글꼴 인쇄 가능 여부를 확인하는 것입니다. 이를 위해 java.awt.Font 클래스를 사용할 수 있습니다. 이 메서드는 canDisplay 메서드를 제공합니다.이 메서드는 폰트에 그 문자를 표시하기위한 그리 후가있는 경우를 돌려줍니다. 이것은 효과가있을 수 있지만, 정말 끔찍한 느낌. 그러나이 이 될 수 있습니다. 우리는 알 수 없습니다. 문자가 유효한 문자 나 숫자 인 경우

유효한 문자 나 숫자

또 다른 기준이 될 수 있습니다. java.lang.Character 클래스는이를 확인하기 위해 isLetterisDigit 메서드를 제공합니다. 당신이 잘 잘못된 문자 집합을 사용했을 수 있도록

캐릭터 세트

우리 모두

TANSTAPT 알고있다. Excel과 동일한 문자 세트를 사용하고 있는지 확인하십시오.

이러한 기준이 의도에 맞지 않으면 요구 사항을 추가로 지정해야합니다.

0

당신은 같은 모든 '유효한'문자 정규식 만들 수 있습니다

String regexValidCharacters = "[A-Za-z0-9]*"; 

과 같은 것을 수행

if(invalidString.replaceAll(regexValidCharacters, "").length() > 0) 
    ABORT! 

가 아마 더 나은 솔루션이 있지만이 잘 작동합니다을 ..^

+0

특정 입력에 대해 유효합니다. 나는 '~!'§ $ % &/öß'의 모든 문자를 인쇄 가능하다고 생각하지만 정규 표현식을 전달하지는 않습니다. 여기서 어려운 점은 OP가 의도 한 모든 유효한 문자를 지정하는 정규 표현식을 찾는 것입니다 .. – tilpner

+0

잘 정규식은 단지 예일뿐입니다. 여러분이 다음과 같이 만들 수 있다고 생각합니다 :'String regexValidCharacters = "[A-Za-z0-9 ~!"§ $ % &/öß] * "; ' – Arkillon

+0

''[A- \ "$ % &/öß] *"\ for \ – Arkillon

관련 문제