2012-07-18 4 views
0

위 작업을 수행하려고합니다. 한 가지 옵션은 특수 문자 인 문자 집합을 얻은 다음 Java 논리를 사용하여이를 수행 할 수 있습니다. 하지만 모든 특수 문자를 포함시켜야합니다.영어 이외의 문자를 허용하면서 특수 문자를 구별하는 Java 정규식

더 좋은 방법이 있습니까?

+1

달성하려는 목표가 명확하지 않습니다. 몇 가지 예를 들려 줄 수 있습니까? –

+2

'java.lang.Character'에는'isLetter (char)'와'isWhitespace (char)'와 같은 다양한 API가 있습니다. 그런 구조를 사용하여 원하는 것을 표현할 수 있습니까? 그렇다면 정규 표현식으로의 변환에 관한 대화가 더 효율적입니다. –

+0

그래서 입력을 확인한다고 가정 해보십시오. 영어 이외의 문자를 버리면 정규식 ([a-zA-Z0-9])과 같은 특수 문자의 유효성을 검사 할 수 있습니다. 그래서 입력이 논리 위에있는 영어 이외의 문자 인 경우 정규식과 일치하지 않으므로 특수 문자로 간주하십시오. –

답변

0

특수 문자가 무엇인지 결정해야합니다. 관심 대상이 될 수있는 한 가지 방법은 Character.getType(char)입니다.이 메서드는 Character.LOWERCASE_LETTER 또는 Character.CURRENCY_SYMBOL과 같은 Character의 상수 값 중 하나와 일치하는 int를 반환합니다. 이를 통해 문자의 일반 범주를 결정할 수 있으며, 어떤 범주가 '특수 문자'로 간주되고 텍스트의 일부로 받아 들일지를 결정해야합니다.

Java는 UTF-16을 사용하여 char 및 String 값을 인코딩하므로 결과적으로 보조 문자를 처리해야 할 수도 있습니다 (getType 메소드 설명의 링크 참조). 이것은 성가시다. 그러나 Character 메서드는이 상황을 감지하고이를 해결하는 데 도움이되는 메서드를 제공합니다. Character.isSupplementaryCodepoint(int)Character.codepointAt(char[], int) 방법을 참조하십시오.

또한 Java 6은 Java 7보다 Unicode에 대해 거의 알지 못합니다. Java의 최신 버전은 Unicode 데이터베이스에 훨씬 더 많은 것을 추가했지만 Java 6에서 실행되는 코드는 일부를 인식하지 못합니다) 이국적인 코드 포인트를 유니 코드 블록 또는 일반 범주의 일부로 간주하므로 코드를 작성할 때이를 염두에 두어야합니다.

0

유니 코드 문자열에서 모든 제어 문자를 제거하려는 것처럼 보입니다. 정규식에서 유니 코드 문자 범주 식별자를 사용하여이 작업을 수행 할 수 있습니다. 범주 "Cc"에는 해당 문자가 들어 있습니다 (http://www.fileformat.info/info/unicode/category/Cc/list.htm 참조).

myString = myString.replaceAll("[\p{Cc}]+", ""); 
+0

그러나 영어 이외의 문자가 있으면 false라고 말합니다. 나는 그것이 허용되기를 바란다. –

+0

올바른 유니 코드 문자열을 처리하고 있습니까? 바이트/ASCII로 잘못 변환 된 UTF-8 문자열이있을 수 있습니다. 이것은 또한 정규 표현식이 UTF-8 제어 순서 문자와 일치하도록합니다 (http://en.wikipedia.org/wiki/UTF-8#Description 참조). –

관련 문제