위 작업을 수행하려고합니다. 한 가지 옵션은 특수 문자 인 문자 집합을 얻은 다음 Java 논리를 사용하여이를 수행 할 수 있습니다. 하지만 모든 특수 문자를 포함시켜야합니다.영어 이외의 문자를 허용하면서 특수 문자를 구별하는 Java 정규식
더 좋은 방법이 있습니까?
위 작업을 수행하려고합니다. 한 가지 옵션은 특수 문자 인 문자 집합을 얻은 다음 Java 논리를 사용하여이를 수행 할 수 있습니다. 하지만 모든 특수 문자를 포함시켜야합니다.영어 이외의 문자를 허용하면서 특수 문자를 구별하는 Java 정규식
더 좋은 방법이 있습니까?
특수 문자가 무엇인지 결정해야합니다. 관심 대상이 될 수있는 한 가지 방법은 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에서 실행되는 코드는 일부를 인식하지 못합니다) 이국적인 코드 포인트를 유니 코드 블록 또는 일반 범주의 일부로 간주하므로 코드를 작성할 때이를 염두에 두어야합니다.
유니 코드 문자열에서 모든 제어 문자를 제거하려는 것처럼 보입니다. 정규식에서 유니 코드 문자 범주 식별자를 사용하여이 작업을 수행 할 수 있습니다. 범주 "Cc"에는 해당 문자가 들어 있습니다 (http://www.fileformat.info/info/unicode/category/Cc/list.htm 참조).
myString = myString.replaceAll("[\p{Cc}]+", "");
그러나 영어 이외의 문자가 있으면 false라고 말합니다. 나는 그것이 허용되기를 바란다. –
올바른 유니 코드 문자열을 처리하고 있습니까? 바이트/ASCII로 잘못 변환 된 UTF-8 문자열이있을 수 있습니다. 이것은 또한 정규 표현식이 UTF-8 제어 순서 문자와 일치하도록합니다 (http://en.wikipedia.org/wiki/UTF-8#Description 참조). –
달성하려는 목표가 명확하지 않습니다. 몇 가지 예를 들려 줄 수 있습니까? –
'java.lang.Character'에는'isLetter (char)'와'isWhitespace (char)'와 같은 다양한 API가 있습니다. 그런 구조를 사용하여 원하는 것을 표현할 수 있습니까? 그렇다면 정규 표현식으로의 변환에 관한 대화가 더 효율적입니다. –
그래서 입력을 확인한다고 가정 해보십시오. 영어 이외의 문자를 버리면 정규식 ([a-zA-Z0-9])과 같은 특수 문자의 유효성을 검사 할 수 있습니다. 그래서 입력이 논리 위에있는 영어 이외의 문자 인 경우 정규식과 일치하지 않으므로 특수 문자로 간주하십시오. –