악센트를 제거하고 전체 문자열을 일반 문자로 변환하는 방법이 있습니까?


263

방법을 사용 String.replaceAll()하고 문자를 하나씩 바꾸는 것 외에 악센트를 없애고 문자를 규칙적으로 만드는 더 좋은 방법이 있습니까? 예:

입력: orčpžsíáýd

산출: orcpzsiayd

러시아어 알파벳이나 중국어와 같은 악센트가있는 모든 문자를 포함 할 필요는 없습니다.

답변:


387

java.text.Normalizer이것을 처리하는 데 사용하십시오 .

string = Normalizer.normalize(string, Normalizer.Form.NFD);
// or Normalizer.Form.NFKD for a more "compatable" deconstruction 

이렇게하면 모든 악센트 표시가 문자와 분리됩니다. 그런 다음 각 문자를 문자와 비교하고 그렇지 않은 문자는 버리십시오.

string = string.replaceAll("[^\\p{ASCII}]", "");

텍스트가 유니 코드 인 경우 대신 다음을 사용해야합니다.

string = string.replaceAll("\\p{M}", "");

유니 코드의 \\P{M}경우 기본 글리프와 \\p{M}일치 하고 (소문자)는 각 액센트와 일치합니다.

포인터와 대한 GarretWilson 덕분에 regular-expressions.info 큰 유니 코드 가이드.


7
이것은 매번 정규 표현식을 컴파일합니다. 한 번만 필요하면 괜찮지 만 많은 텍스트 로이 작업을 수행 해야하는 경우 정규 표현식을 미리 컴파일하는 것이 좋습니다.
David Conrad

3
모든 라틴 문자가 ASCII + 악센트로 분해되는 것은 아닙니다. 이것은 예를 들어 죽일 것입니다. 폴란드어에서 사용되는 "획이있는 라틴어 {자본, 소문자} 문자 l"
Michał Politowski 2016 년

12
이것은 좋은 접근 방법이지만 ASCII가 아닌 모든 문자를 제거하는 것은 과잉이며 다른 사람들이 지적한 것처럼 원하지 않는 것을 제거합니다. 모든 유니 코드 "표시"를 제거하는 것이 좋습니다. 비 간격 표시, 간격 / 결합 표시 및 둘러싸 기 표시를 포함합니다. 당신은 이것을 할 수 있습니다 string.replaceAll("\\p{M}", ""). 자세한 내용은 regular-expressions.info/unicode.html 을 참조하십시오.
Garret Wilson

4
NFD 대신 Normalizer.Form.NFKD를 사용하고 싶을 수도 있습니다. NFKD는 합자 같은 것을 ASCII 문자로 변환합니다 (예 : FI에서 fi로). NFD는이 작업을 수행하지 않습니다.
chesterm8

2
@ chesterm8, 흥미롭게도 NFKD는 "fi"를 "fi"로 변환하고 있지만 "Æ"를 "AE"로 변환하지 않습니다. 이유를 찾으려면 유니 코드 데이터를 가져와야하지만 추측하지는 않았습니다.
가렛 윌슨

136

2011 년 현재 Apache Commons StringUtils.stripAccents (input)를 사용할 수 있습니다 (3.0부터).

    String input = StringUtils.stripAccents("Tĥïŝ ĩš â fůňķŷ Šťŕĭńġ");
    System.out.println(input);
    // Prints "This is a funky String"

노트 :

허용되는 답변 (Erick Robertson 's)은 ​​Ø 또는 Ł에서 작동하지 않습니다. Apache Commons 3.5는 Ø에서도 작동하지 않지만 Ł에서는 작동합니다. Ø대한 Wikipedia 기사를 읽은 후에 는 "O"로 대체해야할지 모르겠습니다. "z"뒤에 알파벳순으로 노르웨이어와 덴마크어로 별도의 문자가 있습니다. "스트립 악센트"접근 방식의 한계에 대한 좋은 예입니다.


2
나는이 볼 L 오픈 버그 리포트 , @KarolS가. 누군가 풀 요청을 제출했지만 일부 테스트에 실패했으며 작년 7 월 이후 업데이트되지 않았습니다.
DavidS

1
5 일 전에 업데이트가 있었고 풀 요청이 병합되었습니다.
EpicPandaForce

6
Commons Lang 3.5는 며칠 전에 출시되었습니다. 나는 그것이 Ł에서 작동한다는 것을 확인했다. Ø에서는 작동하지 않습니다. Ø 에 대한 Wiki 기사를 읽었을 때 , "O"로 대체해야할지 모르겠습니다 . "z"뒤에 알파벳순으로 노르웨이어와 덴마크어 로 된 별도의 문자 입니다. "스트립 악센트"접근 방식의 한계에 대한 좋은 예입니다.
DavidS

2
라이브러리를 포함하지 않는 경우 당신은에서 소스에서 쉽게 해당 기능에 관여하는 두 가지 방법이 걸릴 수 commons.apache.org/proper/commons-lang/apidocs/src-html/org/...
lujop

2
덴마크 인 / 노르웨이어 인 덴마크 인 / 프랑스 인 및 독일 / 스웨덴어 / 헝가리어 / 에스토니아어 등이 덴마크 인으로서 덴마크어 / 노르웨이어는 oe를 쓰는 짧은 방법으로 시작되었습니다. 따라서 귀하의 목적에 따라 이것은 당신이 원하는 대체물 일 수 있습니다.
Ole VV

57

@ virgo47의 솔루션은 매우 빠르지 만 대략적인 것입니다. 허용되는 답변은 정규화와 정규식을 사용합니다. 정규 표현식없이 정규 표현식과 정규 표현식에서 시간의 어느 부분을 차지했는지 궁금합니다 .ASCII가 아닌 문자를 모두 제거하면 정규 표현식없이 수행 할 수 있습니다.

import java.text.Normalizer;

public class Strip {
    public static String flattenToAscii(String string) {
        StringBuilder sb = new StringBuilder(string.length());
        string = Normalizer.normalize(string, Normalizer.Form.NFD);
        for (char c : string.toCharArray()) {
            if (c <= '\u007F') sb.append(c);
        }
        return sb.toString();
    }
}

코드 선명도의 감소가 장점이 있는지 확실하지는 않지만 char []에 작성하고 toCharArray ()를 호출하지 않으면 약간의 추가 속도 향상을 얻을 수 있습니다.

public static String flattenToAscii(String string) {
    char[] out = new char[string.length()];
    string = Normalizer.normalize(string, Normalizer.Form.NFD);
    int j = 0;
    for (int i = 0, n = string.length(); i < n; ++i) {
        char c = string.charAt(i);
        if (c <= '\u007F') out[j++] = c;
    }
    return new String(out);
}

이 변형은 노멀 라이저를 사용하는 것의 정확성과 테이블을 사용하는 것의 속도의 이점이 있습니다. 내 컴퓨터에서 이것은 허용되는 답변보다 약 4 배 빠르며 @ virgo47보다 6.6 배에서 7 배 느립니다 (허용 된 답변은 내 컴퓨터의 @ virgo47보다 약 26 배 느립니다).


2
outj문자열 객체를 구성하는 데 사용되기 전에 유효한 문자 수와 일치하도록 크기를 조정해야 합니다.
Lefteris E

4
이 솔루션에 반대 의견이 있습니다. "æøåá"입력을 상상해보십시오. 현재는 flattenToAscii결과 "aa .."를 생성합니다. 여기서 점은 \ u0000을 나타냅니다. 그건 좋지 않다. 첫 번째 질문은 "비정규 화 가능"문자를 표현하는 방법입니다. 그것이?라고 말하거나 NULL 문자를 남겨 둘 수 있지만 어쨌든 (정규 솔루션과 마찬가지로) 올바른 위치를 유지해야합니다. 이를 위해 루프의 if는 다음과 같아야합니다. if (c <= '\u007F') out[j++] = c; else if (Character.isLetter(c)) out[j++] = '?';그것은 조금 느려질 것이지만 처음에는 정확해야합니다. ;-)
처녀 자리 47

내 마지막 의견을 광고하십시오 (너무 나빠서 더 이상 길 수는 없습니다)-아마도 긍정적 인 테이크 ( isLetter)가 옳지 않지만 더 잘 찾지 못했습니다. 나는 유니 코드 전문가가 아니므로 원래 문자를 대체하는 단일 문자 클래스를 더 잘 식별하는 방법을 모르겠습니다. 문자는 대부분의 응용 프로그램 / 사용에 적합합니다.
virgo47

1
NFD 대신 Normalizer.Form.NFKD를 사용하고 싶을 수도 있습니다. NFKD는 합자 같은 것을 ASCII 문자로 변환합니다 (예 : FI에서 fi로). NFD는이 작업을 수행하지 않습니다.
chesterm8

2
우리를 위해 캐릭터를 모두 제거하고 싶었습니다. 후행 null 문자가 없도록 다른 String 생성자를 사용하여 제거했습니다. return new String (out, 0, j);
마이크 사마라스

30

편집 : Java <6에 갇혀 있지 않고 속도가 중요하지 않거나 번역 테이블이 너무 제한적인 경우 David의 답변을 사용하십시오. 요점은 Normalizer루프 내부의 변환 테이블 대신 (Java 6에 도입) 사용하는 것입니다.

이것이 "완벽한"솔루션은 아니지만, 범위 (우리의 경우 Latin1,2)를 알고 Java 6 이전에 작동했지만 (실제 문제는 아님) 가장 제안 된 버전 (아마도 수도 있고 그렇지 않을 수도 있음)보다 훨씬 빠를 때 효과적입니다. 문제가되지 않습니다) :

    /**
 * Mirror of the unicode table from 00c0 to 017f without diacritics.
 */
private static final String tab00c0 = "AAAAAAACEEEEIIII" +
    "DNOOOOO\u00d7\u00d8UUUUYI\u00df" +
    "aaaaaaaceeeeiiii" +
    "\u00f0nooooo\u00f7\u00f8uuuuy\u00fey" +
    "AaAaAaCcCcCcCcDd" +
    "DdEeEeEeEeEeGgGg" +
    "GgGgHhHhIiIiIiIi" +
    "IiJjJjKkkLlLlLlL" +
    "lLlNnNnNnnNnOoOo" +
    "OoOoRrRrRrSsSsSs" +
    "SsTtTtTtUuUuUuUu" +
    "UuUuWwYyYZzZzZzF";

/**
 * Returns string without diacritics - 7 bit approximation.
 *
 * @param source string to convert
 * @return corresponding string without diacritics
 */
public static String removeDiacritic(String source) {
    char[] vysl = new char[source.length()];
    char one;
    for (int i = 0; i < source.length(); i++) {
        one = source.charAt(i);
        if (one >= '\u00c0' && one <= '\u017f') {
            one = tab00c0.charAt((int) one - '\u00c0');
        }
        vysl[i] = one;
    }
    return new String(vysl);
}

32 비트 JDK로 내 HW에서 테스트 한 결과 이것이 ~ 100ms에서 àèéľšťč89FDČ에서 aeelstc89FDC로 백만 번 변환을 수행하는 반면 Normalizer 방식은 3.7 초 (37x 느리게) 만듭니다. 요구 사항이 성능에 근접하고 입력 범위를 알고있는 경우이 기능이 적합 할 수 있습니다.

즐겨 :-)


1
제안 된 버전의 속도 저하는 노멀 라이저가 아닌 정규식으로 인한 것입니다. 노멀 라이저를 사용하지만 비 ASCII 문자 '손으로'를 제거하는 것이 버전보다 빠르지는 않지만 빠릅니다. 그러나 latin1 및 latin2 대신 모든 유니 코드에서 작동합니다.
David Conrad

나는 이것을 더 많은 문자, pastebin.com/FAAm6a2j 와 함께 작동하도록 확장 했습니다 .D (DZ)와 같은 다중 문자 문자에서는 올바르게 작동하지 않습니다. 오직 1 개의 문자 만 생성합니다. 또한 내 함수는 문자열 대신 char을 사용하므로 char을 처리하는 경우 더 빠르므로 변환 할 필요가 없습니다.
제임스 T

안녕하세요, tab00c0 필드의 글자가 무엇인지 이해하지 못합니까? 예를 들어 "AAAAAAACEEEEIIII"또는 "1LlNnNnNnnNnOoOo"등이 있습니다. 어디서 찾았습니까? 또한 코어 응답 코드 만 사용하지 않는 이유는 무엇입니까?
ThanosFisherman

@ThanosF는 코드를 살펴보십시오 (필요한 경우 디버거 사용). 이것은 문자열의 모든 문자에 대해 수행되는 작업입니다. "이 문자가 \ u00c0과 \ u017f 사이에 있습니까? 그렇다면 테이블에서 7 비트 ASCII 문자로 바꾸십시오." 표에는 7 비트에 해당하는 두 개의 인코딩 페이지 (라틴 1 및 2) 만 포함됩니다. 따라서 코드가 \ u00e0 (à) 인 문자 인 경우 테이블의 32 번째 위치 (e0-c0 = 32)에서 7 비트 근사값을 가져옵니다 ( "a"). 일부 문자는 문자가 아니며 코드와 함께 남아 있습니다.
virgo47

설명해 주셔서 감사합니다. 이 변수를 내 언어로 확장 할 수 있도록 인코딩 페이지를 어디에서 찾을 수 있습니까? :) (그리스어) 허용 대답은 이미 그리스어 악센트 문자를 교체하는 작업을 수행하지만 난 너무 당신의 방법을 시도하고 몇 가지 벤치 마크를 실행하고 싶었다
ThanosFisherman

22
System.out.println(Normalizer.normalize("àèé", Normalizer.Form.NFD).replaceAll("\\p{InCombiningDiacriticalMarks}+", ""));

나를 위해 일했다. 위의 스 니펫 출력은 "aee"를 제공합니다.

System.out.println(Normalizer.normalize("àèé", Normalizer.Form.NFD).replaceAll("[^\\p{ASCII}]", ""));

대체하지 않았다.


1
이것을 확인하면 ... 일반적으로 ASCII는 정상적으로 작동하지만 JRockit (1.6.0_29 64b)가있는 Linux (64b) 에서이 문제가 발생했습니다. 다른 설정으로 확인할 수 없으며 해당 코어를 확인할 수는 없지만 다른 제안 된 솔루션이 효과 있는지 확인 하고이 솔루션에 투표한다는 것을 확인할 수 있습니다 . :-) (BTW :하지만 A A에, 그것은 일부 교체를했지만 충분하지, 그것은 예를 들어 U에 Ú을 바 꾸었습니다.)
virgo47

1
NFD 대신 Normalizer.Form.NFKD를 사용하고 싶을 수도 있습니다. NFKD는 합자 같은 것을 ASCII 문자로 변환합니다 (예 : FI에서 fi로). NFD는이 작업을 수행하지 않습니다.
chesterm8

@KarolS 나는 어느 악센트도
eis

@eis 문자 사이의 슬래시는 분음 부호로 간주됩니다. en.wikipedia.org/wiki/Diacritic 그리고 위키 백과 페이지에서와 같이 "악센트"에 대한보다 엄격한 정의로 가면 분음은 악센트가 아니므로 Nico의 답변 여전히 잘못되었습니다.
Karol S

6

언어에 따라 악센트 (문자의 소리를 변경하는)로 간주되지 않지만 발음 구별 부호로 간주 될 수 있습니다.

https://ko.wikipedia.org/wiki/Diacritic#Languages_with_letters_include_diacritics

"보스니아 어와 크로아티아어는 č, ć, đ, š 및 ž의 기호를가집니다.이 기호는 별도의 문자로 간주되며 사전과 기타 문맥에서 단어가 알파벳 순서로 나열됩니다."

그것들을 제거하는 것은 본질적으로 단어의 의미를 바꾸거나 글자를 완전히 다른 단어로 바꾸는 것일 수 있습니다.


5
동의했다. -> "호라"(창녀) "호라"(듣고) : 스웨덴어 예를 들어
크리스토퍼 Hammarström

14
무슨 뜻인지는 중요하지 않습니다. 문제는 그것들을 제거하는 방법입니다.
Erick Robertson

7
Erick : 그들이 무엇을 부르는지 중요합니다. 질문에서 악센트를 제거하는 방법을 묻고 악센트가 아닌 경우 악센트처럼 보이는 모든 것을 제거하는 방법이 아닙니다. 이것은 아마도 의견이 아니라 대답이어야합니다.
Smig

4
필자의 일반적인 사용 사례는 검색, 특히 영어 키보드를 입력으로 사용하는 혼합 언어 검색입니다.이 경우 가음보다 오음이 더 낫습니다.
nilskp

3

Strings equality check와 관련하여 동일한 문제에 직면했습니다. 비교 문자열 중 하나에는 ASCII 문자 코드 128-255가 있습니다.

즉, 비 분리 공간-[Hex-A0] Space [Hex-20]. HTML에 비 공백 공간을 표시합니다. 나는 다음을 사용했다 spacing entities. 그들의 성격과 바이트는&emsp is very wide space[ ]{-30, -128, -125}, &ensp is somewhat wide space[ ]{-30, -128, -126}, &thinsp is narrow space[ ]{32} , Non HTML Space {}

String s1 = "My Sample Space Data", s2 = "My Sample Space Data";
System.out.format("S1: %s\n", java.util.Arrays.toString(s1.getBytes()));
System.out.format("S2: %s\n", java.util.Arrays.toString(s2.getBytes()));

바이트 단위 출력 :

S1 : [77, 121,, 3283, 97, 109, 112, 108, 101,, 3283, 112, 97, 99, 101 32,, 68, 97, 116, 97] S2 : [77, 121 -30, -128, -125,, 83, 97, 109, 112, 108, 101,, -30, -128, -12583, 112, 97, 99, 101 -30, -128, -125,, 68, 97, 116, 97]

다른 공간과 바이트 코드에 아래 코드를 사용하십시오. wiki for List_of_Unicode_characters

String spacing_entities = "very wide space,narrow space,regular space,invisible separator";
System.out.println("Space String :"+ spacing_entities);
byte[] byteArray = 
    // spacing_entities.getBytes( Charset.forName("UTF-8") );
    // Charset.forName("UTF-8").encode( s2 ).array();
    {-30, -128, -125, 44, -30, -128, -126, 44, 32, 44, -62, -96};
System.out.println("Bytes:"+ Arrays.toString( byteArray ) );
try {
    System.out.format("Bytes to String[%S] \n ", new String(byteArray, "UTF-8"));
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}
  • for Java 용 유니 코드 문자열의 ASCII 음역. unidecode

    String initials = Unidecode.decode( s2 );
  • ➩ 사용 Guava: Google Core Libraries for Java.

    String replaceFrom = CharMatcher.WHITESPACE.replaceFrom( s2, " " );

    공간에 대한 URL 인코딩 경우 Guava laibrary를 사용하십시오.

    String encodedString = UrlEscapers.urlFragmentEscaper().escape(inputString);
  • String.replaceAll()some 일부와 함께 사용되는이 문제를 극복하기 위해 RegularExpression.

    // \p{Z} or \p{Separator}: any kind of whitespace or invisible separator.
    s2 = s2.replaceAll("\\p{Zs}", " ");
    
    
    s2 = s2.replaceAll("[^\\p{ASCII}]", " ");
    s2 = s2.replaceAll(" ", " ");
  • java java.text.Normalizer.Form 사용 . 이 열거 형은 유니 코드 표준 부록 # 15- 유니 코드 정규화 양식에 설명 된 네 가지 유니 코드 정규화 형식과 이에 액세스하는 두 가지 방법의 상수를 제공 합니다.

    여기에 이미지 설명을 입력하십시오

    s2 = Normalizer.normalize(s2, Normalizer.Form.NFKC);

Unidecode, Normalizer, StringUtils 와 같은 다양한 접근 방식에서 문자열 및 출력 테스트 .

String strUni = "Tĥïŝ ĩš â fůňķŷ Šťŕĭńġ Æ,Ø,Ð,ß";

// This is a funky String AE,O,D,ss
String initials = Unidecode.decode( strUni );

// Following Produce this o/p: Tĥïŝ ĩš â fůňķŷ Šťŕĭńġ Æ,Ø,Ð,ß
String temp = Normalizer.normalize(strUni, Normalizer.Form.NFD);
Pattern pattern = Pattern.compile("\\p{InCombiningDiacriticalMarks}+");
temp = pattern.matcher(temp).replaceAll("");

String input = org.apache.commons.lang3.StringUtils.stripAccents( strUni );

Unidecode 사용 은 best choice아래에 표시된 내 최종 코드입니다.

public static void main(String[] args) {
    String s1 = "My Sample Space Data", s2 = "My Sample Space Data";
    String initials = Unidecode.decode( s2 );
    if( s1.equals(s2)) { //[ , ] %A0 - %2C - %20 « http://www.ascii-code.com/
        System.out.println("Equal Unicode Strings");
    } else if( s1.equals( initials ) ) {
        System.out.println("Equal Non Unicode Strings");
    } else {
        System.out.println("Not Equal");
    }

}

3

Junidecode 제안 합니다 . 'Ł'와 'Ø'를 처리 할뿐만 아니라 중국어와 같은 다른 알파벳을 라틴 알파벳으로 변환하는 데에도 효과적입니다.


1
유망한 것처럼 보이지만 이것이 더 활발하고 유지 관리 된 프로젝트이며 Maven에서 사용할 수 있기를 바랍니다.
Phil

2

@David Conrad 솔루션은 노멀 라이저를 사용하여 가장 빠르게 시도했지만 버그가 있습니다. 기본적으로 악센트가 아닌 문자를 제거합니다. 예를 들어 중국어 문자와 같은 다른 문자는 모두 제거됩니다. 우리가 제거하고자하는 문자는 간격이 아닌 문자이며 최종 문자열에서 여분의 너비를 차지하지 않는 문자입니다. 이 폭이 0 인 문자는 기본적으로 다른 문자와 결합됩니다. 예를 들어,`처럼 문자로 분리 된 것을 볼 수 있다면, 공백 문자와 결합 된 것 같습니다.

public static String flattenToAscii(String string) {
    char[] out = new char[string.length()];
    String norm = Normalizer.normalize(string, Normalizer.Form.NFD);

    int j = 0;
    for (int i = 0, n = norm.length(); i < n; ++i) {
        char c = norm.charAt(i);
        int type = Character.getType(c);

        //Log.d(TAG,""+c);
        //by Ricardo, modified the character check for accents, ref: http://stackoverflow.com/a/5697575/689223
        if (type != Character.NON_SPACING_MARK){
            out[j] = c;
            j++;
        }
    }
    //Log.d(TAG,"normalized string:"+norm+"/"+new String(out));
    return new String(out);
}

1

라이브러리가없는 경우 정규 표현식과 노멀 라이저를 사용 하는 가장 좋은 방법 중 하나는 다음 같습니다.

    public String flattenToAscii(String s) {
                if(s == null || s.trim().length() == 0)
                        return "";
                return Normalizer.normalize(s, Normalizer.Form.NFD).replaceAll("[\u0300-\u036F]", "");
}

replaceAll ( "[^ \ p {ASCII}]", ""))보다 효율적이며 분음 부호가 필요하지 않은 경우 (예와 같이).

그렇지 않으면 p {ASCII} 패턴을 사용해야합니다.

문안 인사.


0

가장 좋은 해결책은 각 문자를 HEX로 변환하고 다른 HEX로 바꾸는 것입니다. 두 가지 유니 코드 입력이 있기 때문입니다.

Composite Unicode
Precomposed Unicode

예를 들어 Composite Unicode로 작성된 "Ồ"은 Precomposed Unicode로 작성된 "Ồ"과 다릅니다. 샘플 문자를 복사하여 변환하여 차이점을 확인할 수 있습니다.

In Composite Unicode, "Ồ" is combined from 2 char: Ô (U+00d4) and ̀ (U+0300)
In Precomposed Unicode, "Ồ" is single char (U+1ED2)

일부 은행에서 정보를 코어 뱅크 (보통 유니 코드를 지원하지 않음)로 보내기 전에 정보를 변환하기 위해이 기능을 개발했으며 최종 사용자가 여러 유니 코드 타이핑을 사용하여 데이터를 입력 할 때이 문제에 직면했습니다. 따라서 HEX로 변환하고 교체하는 것이 가장 신뢰할 수있는 방법이라고 생각합니다.


-1

누군가 코 틀린에서 이것을하기 위해 고군분투하고 있다면,이 코드는 매력처럼 작동합니다. 불일치를 피하기 위해 .toUpperCase 및 Trim ()도 사용합니다. 그런 다음이 기능을 캐스팅합니다.

   fun stripAccents(s: String):String{

   if (s == null) {
      return "";
   }

val chars: CharArray = s.toCharArray()

var sb = StringBuilder(s)
var cont: Int = 0

while (chars.size > cont) {
    var c: kotlin.Char
    c = chars[cont]
    var c2:String = c.toString()
   //these are my needs, in case you need to convert other accents just Add new entries aqui
    c2 = c2.replace("Ã", "A")
    c2 = c2.replace("Õ", "O")
    c2 = c2.replace("Ç", "C")
    c2 = c2.replace("Á", "A")
    c2 = c2.replace("Ó", "O")
    c2 = c2.replace("Ê", "E")
    c2 = c2.replace("É", "E")
    c2 = c2.replace("Ú", "U")

    c = c2.single()
    sb.setCharAt(cont, c)
    cont++

}

return sb.toString()

}

이 재미를 사용하려면 다음과 같이 코드를 캐스팅하십시오.

     var str: String
     str = editText.text.toString() //get the text from EditText
     str = str.toUpperCase().trim()

     str = stripAccents(str) //call the function
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.