Aksanlardan kurtulmanın ve bir dizeyi normal harflere dönüştürmenin bir yolu var mı?


263

Aksanlardan kurtulmanın ve bu harfleri String.replaceAll()yöntem kullanmanın ve harfleri tek tek değiştirmenin dışında düzenli hale getirmenin daha iyi bir yolu var mı ? Misal:

Giriş: orčpžsíáýd

Çıktı: orcpzsiayd

Rus alfabesi veya Çin alfabesi gibi aksanlı tüm harfleri içermesi gerekmez.

Yanıtlar:


387

java.text.NormalizerBunu sizin için halletmek için kullanın .

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

Bu, tüm vurgu işaretlerini karakterlerden ayıracaktır. Sonra, her karakteri bir mektup olmakla karşılaştırmanız ve olmayan karakterleri dışarı atmanız yeterlidir.

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

Metniniz unicode ise, bunun yerine şunu kullanmalısınız:

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

Unicode için, \\P{M}temel glifle ve \\p{M}(küçük harf) her aksanla eşleşir.

İşaretçi için GarretWilson ve harika unicode kılavuzu için düzenli ifadeler .


7
Bu, her seferinde normal ifadeyi derler, bu da sadece bir kez ihtiyacınız varsa iyidir, ancak bunu çok fazla metinle yapmanız gerekiyorsa, normal ifadeyi önceden derlemek bir kazançtır.
David Conrad

3
Latin kökenli harflerin tümü ASCII + aksanlarına ayrılmaz. Bu, ör. Lehçe'de kullanılan "Latin {büyük, küçük} l harfi konturlu".
Michał Politowski

12
Bu iyi bir yaklaşımdır, ancak ASCII olmayan tüm karakterleri kaldırmak aşırıdır ve muhtemelen belirtmediğiniz gibi istemediğiniz şeyleri kaldıracaktır. Tüm Unicode "işaretlerini" kaldırmak daha iyi olurdu; boşluk bırakmayan işaretler, boşluk bırakma / birleştirme işaretleri ve kapalı işaretler dahil. Bunu ile yapabilirsiniz string.replaceAll("\\p{M}", ""). Daha fazla bilgi için regular-expressions.info/unicode.html adresine bakın .
Garret Wilson

4
Muhtemelen NFD yerine Normalizer.Form.NFKD kullanmak istiyorsunuz - NFKD, bitişik harfler gibi şeyleri ascii karakterlere dönüştürecektir (örneğin fi - fi), NFD bunu yapmayacaktır.
chesterm8

2
@ chesterm8, ilginç bir şekilde NFKD "fi" yi "fi" ya çeviriyor, ama "Æ" yi "AE" ye dönüştürmüyor. Sanırım nedenini bulmak için Unicode verilerini getirmem gerekecek, ama beklediğim bu değildi.
Garret Wilson

136

2011 itibariyle Apache Commons StringUtils.stripAccents (input) kullanabilirsiniz (3.0'dan beri):

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

Not:

Kabul edilen cevap (Erick Robertson) Ø veya Ł için çalışmaz. Apache Commons 3.5 de Ø için çalışmaz, ancak Ł için çalışır. Ø için Wikipedia makalesini okuduktan sonra , "O" ile değiştirilmesi gerektiğinden emin değilim: Norveççe ve Danca'da "z" harfinden sonra alfabetik olarak yazılmış ayrı bir harf. "Şerit vurgular" yaklaşımının sınırlamalarına iyi bir örnektir.


2
Görüyorum ki Ł, @KarolS için açık bir hata raporu var . Birisi bir çekme isteği gönderdi, ancak bazı testlerde başarısız oldu ve geçen yılın Temmuz ayından bu yana güncellenmedi.
DavidS

1
5 gün önce üzerinde güncelleme yapıldı ve çekme isteği birleştirildi.
16:16, EpicPandaForce

6
Commons Lang 3.5 birkaç gün önce piyasaya sürüldü. Şimdi Ł üzerinde çalıştığını doğruladım. Ø üzerinde çalışmaz. Ø için Wiki makalesini okuduğumda , "O" ile değiştirilmesi gerektiğinden emin değilim: Norveççe ve Danca'da "z" harfinden sonra alfabetik olarak yazılmış ayrı bir harf . "Şerit vurgular" yaklaşımının sınırlamalarına iyi bir örnektir.
DavidS

2
Kütüphaneyi dahil etmek istemiyorsanız, bu özelliğe dahil olan iki yöntemi commons.apache.org/proper/commons-lang/apidocs/src-html/org/…
lujop

2
Danimarkalı olarak, Danimarkalı / Norveççe ø Fransızca œ ve Almanca / İsveççe / Macarca / Estonca vb. Gibi oe yazmanın kısa bir yolu olarak ortaya çıkar. Yani amacınıza bağlı olarak bu istediğiniz ikame olabilir.
Ole VV

57

@ Virgo47'nin çözümü çok hızlı, ancak yaklaşıktır. Kabul edilen cevap Normalizer ve normal ifade kullanır. Tüm ASCII olmayan karakterlerin kaldırılması normal ifade olmadan yapılabileceğinden, Normalizer tarafından normal ifadeye göre zamanın hangi kısmının alındığını merak ettim:

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();
    }
}

Küçük net eklentiler char [] içine yazılarak ve toCharArray () çağrılmadan elde edilebilir, ancak kod netliğindeki azalmanın bunu hak ettiğinden emin değilim:

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);
}

Bu varyasyon, Normalizer kullanarak bir doğruluk ve bir tablo kullanarak bir hızın avantajına sahiptir. Makinemde bu, kabul edilen yanıttan yaklaşık 4 kat daha hızlı ve @ virgo47'den 6,6x ila 7x daha yavaş (kabul edilen cevap, makinemdeki @ virgo47'den yaklaşık 26x daha yavaş).


2
outjdize nesnesini oluşturmak için kullanılmadan önce geçerli karakter sayısıyla eşleşecek şekilde yeniden boyutlandırılmalıdır .
Lefteris E

4
Bu çözüme karşı bir itirazım var. "Æøåá" girdisini düşünün. Current flattenToAscii, noktaların \ u0000'ü temsil ettiği "aa .." sonucunu oluşturur. Bu iyi değil. İlk soru - "normalleştirilemez" karakterlerin nasıl temsil edileceği? Diyelim ki? Ya da NULL karakterini orada bırakabiliriz, ancak her durumda bunların doğru konumunu korumalıyız (regex çözümünün yaptığı gibi). Bunun için döngüdeki if gibi bir şey olmalıdır: if (c <= '\u007F') out[j++] = c; else if (Character.isLetter(c)) out[j++] = '?';Biraz yavaşlatır, ancak ilk etapta doğru olmalıdır. ;-)
virgo47

Reklam benim son yorum (çok daha uzun olamaz) kötü - belki olumlu almak ( isLetter) doğru olanı değil, ama daha iyi bulamadık. Ben Unicode uzmanı değilim, bu yüzden orijinal karakterin yerini alan tek karakterin sınıfını nasıl daha iyi tanımlayacağımı bilmiyorum. Harfler çoğu uygulama / kullanım için uygundur.
virgo47

1
Muhtemelen NFD yerine Normalizer.Form.NFKD kullanmak istiyorsunuz - NFKD, bitişik harfler gibi şeyleri ascii karakterlere dönüştürecektir (örneğin fi - fi), NFD bunu yapmayacaktır.
chesterm8

2
Bizim için karakteri tamamen kaldırmak istedik. Sondaki boş karakter olmadığından emin olmak için onları alternatif bir String yapıcısı ile kaldırdım: return new String (out, 0, j);
Mike Samaras

30

DÜZENLEME: Java <6 ile sıkışıp kalmazsanız ve hız kritik değilse ve / veya çeviri tablosu çok sınırlayıcıysa, David'in yanıtını kullanın. Buradaki nokta, Normalizerdöngü içindeki çeviri tablosu yerine (Java 6'da tanıtıldı) kullanmaktır.

Bu "mükemmel" bir çözüm olmasa da, aralığı bildiğimizde iyi çalışır (bizim durumumuzda Latin1,2), Java 6'dan önce çalıştı (gerçek bir sorun değil) ve en çok önerilen sürümden (Mayıs veya Mayıs) çok daha hızlı sorun değil):

    /**
 * 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);
}

32bit JDK ile HW'mdeki testler, bunun àèéľšťč89FDČ'den aeelstc89FDC'ye ~ 100ms'de 1 milyon kez dönüşüm gerçekleştirdiğini gösterirken, Normalizer yolu 3,7 saniyede (37x daha yavaş). İhtiyaçlarınız performansa yakınsa ve giriş aralığını biliyorsanız, bu sizin için olabilir.

Zevk almak :-)


1
Önerilen sürümün yavaşlığının birçoğu Normalizer değil normal ifadeden kaynaklanmaktadır. Normalizer'ı kullanarak ancak ASCII olmayan karakterleri 'elle' kaldırmak, sürümünüz kadar hızlı olmasa da daha hızlıdır. Ancak sadece latin1 ve latin2 yerine tüm Unicode için çalışır.
David Conrad

Daha fazla karakterle çalışmak için bunu genişlettim, pastebin.com/FAAm6a2j , DŽ (DZ) gibi çoklu anahtar karakterleriyle düzgün çalışmadığını unutmayın. Ondan sadece 1 karakter üretecek. Ayrıca benim fonksiyonum dizeleri yerine char kullanır.
James T

Hey tab00c0 alanındaki bu harflerin ne anlama geldiğini anlamıyorum? örneğin "AAAAAAACEEEEIIII" veya "lLlNnNnNnnNnOoOo" vb. Daha önce hiç görmedim. Onları nerede buldun? Ayrıca neden sadece karşılık gelen kodları kullanmıyorsunuz?
ThanosFisherman

@ThanosF sadece kodu geçmeye çalışın (gerekirse hata ayıklayıcı ile). Bunun anlamı bir dizedeki her karakter için: "Bu karakter \ u00c0 ve \ u017f arasında mı? Varsa, tablodaki 7bit ASCII karakteri ile değiştirin." Tablo, 7 bit eşdeğerleriyle iki kodlama sayfasını (Latin 1 ve 2) kapsar. Eğer kod \ u00e0 (à) ile karakter ise 7bit yaklaşımını tablonun 32. pozisyonundan (e0-c0 = 32) alır - "a" dır. Bazı karakterler harf değildir, kodlarıyla birlikte orada bırakılır.
virgo47

Açıklaman için teşekkürler. Bu Değişkeni dilime genişletebilmem için bu kodlama sayfalarını nerede bulabilirim? (Yunanca) Kabul edilen cevap zaten Yunan aksanlı harfleri değiştiren işi yapıyor, ancak ben de yönteminizi denemek ve bazı kriterler çalıştırmak istedim :)
ThanosFisherman

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

benim için çalıştı. Yukarıdaki pasajın çıktısı istediğim şey olan "aee" yi veriyor, ama

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

hiçbir değişiklik yapmadı.


1
Bunu doğrulamak ... normalde ASCII gayet iyi çalışıyor, ancak JRockit (1.6.0_29 64b) ile Linux'ta (64b) bu ​​sorunla karşılaştım. Başka kurulum ile onaylamak Can not, o corellation teyit edemez, ama olabilir ben bunu yukarı oy kullanmalarını diğer önerilen çözüm çalıştı onaylamak ve. :-) (BTW: ama á bir etmek, bazı değiştirme yaptık, ancak bunun yeterli olmadığını, bu örneğin U U değişti.)
virgo47

1
Muhtemelen NFD yerine Normalizer.Form.NFKD kullanmak istiyorsunuz - NFKD, bitişik harfler gibi şeyleri ascii karakterlere dönüştürecektir (örneğin fi - fi), NFD bunu yapmayacaktır.
chesterm8

@KarolS Hiçbirini aksan
eis

@ eis Bir harf üzerindeki eğik çizgi, aksan olarak sayılır: en.wikipedia.org/wiki/Diacritic Ve bu Wikipedia sayfasında olduğu gibi "aksan" ın daha katı bir tanımına giderseniz, diyaser bir aksan değildir, bu yüzden Nico'nun cevabı hala yanlış.
Karol S

6

Dile bağlı olarak, bunlar (mektubun sesini değiştiren) aksan olarak kabul edilebilir, ancak aksan işaretleri

https://en.wikipedia.org/wiki/Diacritic#Languages_with_letters_containing_diacritics

"Boşnakça ve Hırvatça, ayrı harfler olarak kabul edilen ve kelimelerin alfabetik sıraya göre listelendiği diğer bağlamlarda listelenen č, ć, đ, š ve ž sembollerine sahiptir."

Bunları kaldırmak, sözcüğün anlamını doğal olarak değiştiriyor veya harfleri tamamen farklı kelimelere dönüştürüyor olabilir.


5
Kabul. Örneğin İsveççe: "höra" (duymak) -> "hora" (fahişe)
Christoffer Hammarström

14
Ne demek istedikleri önemli değil. Soru bunların nasıl kaldırılacağıdır.
Erick Robertson

7
Erick: Ne denir önemli. Soru aksanların nasıl kaldırılacağını soruyorsa ve bunlar aksan değilse, cevap sadece aksan gibi görünen tüm şeylerin nasıl kaldırılacağı olmayabilir. Bu muhtemelen bir yorum olmalı ve bir cevap olmamalıdır.
Koku

4
Bunun normal kullanım durumunun arama, özellikle karışık dillerin arama, genellikle giriş olarak bir İngilizce klavye ile arama olduğunu düşünüyorum, bu durumda yanlış pozitifleri almak yanlış pozitiflerden daha iyidir.
nilskp

3

Ben Dizeleri eşitlik kontrolü ile ilgili aynı sorunu karşı karşıya, karşılaştırma dize biri ASCII karakter kodu 128-255 vardır .

yani, Kırılmayan alan - [Hex - A0] Alan [Hex - 20]. HTML üzerinde kırılmaz alan göstermek için. Aşağıdakileri kullandım spacing entities. Karakterleri ve baytları&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()));

Bayt cinsinden çıktı:

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]

Farklı Alanlar ve Bayt Kodları için aşağıdaki kodu kullanın: 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();
}
  • Java Java için Unicode dizesinin ASCII harf çevirisi. unidecode

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

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

    URL kodlaması için Alanın için Guava kitaplığını kullanın.

    String encodedString = UrlEscapers.urlFragmentEscaper().escape(inputString);
  • Some String.replaceAll()Bazılarında kullanılan bu sorunun üstesinden gelmek içinRegularExpression .

    // \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(" ", " ");
  • ➩ kullanma java.text.Normalizer.Form . Bu numaralandırma, Unicode Standart Ek # 15 - Unicode Normalleştirme Formlarında açıklanan dört Unicode normalleştirme formunun sabitlerini ve bunlara erişmek için iki yöntemi sağlar.

    resim açıklamasını buraya girin

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

İde 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 );

Kullanılması Unidecode olduğu best choiceaşağıda gösterilen, Benim son kod.

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'u öneririm . Sadece 'Ł' ve 'Ø' ile ilgilenmez, aynı zamanda Çince gibi diğer alfabelerden Latin alfabesine kopyalamak için de iyi çalışır.


1
Umut verici görünüyor, ama keşke daha aktif / sürdürülmüş bir proje ve Maven'de mevcut olsaydı.
Phil

2

@David Conrad çözümü, Normalizer'ı kullanmayı denediğim en hızlı çözümdür, ancak bir hatası vardır. Temelde aksan olmayan karakterler, örneğin Çince karakterler ve æ gibi diğer harfler soyulur. Şeritlemek istediğimiz karakterler boşluk bırakmayan işaretlerdir, son dizede fazladan genişlik içermeyen karakterler. Bu sıfır genişlikteki karakterler temel olarak başka bir karakterle birleşir. Onları bir karakter olarak izole edilmiş olarak görebiliyorsanız, örneğin ``, tahminim boşluk karakteriyle birleşmesidir.

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

Kütüphaneniz yoksa normal ifade ve Normalizer'ı kullanmanın en iyi yollarından biri:

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

ReplaceAll'den ("[^ \ p {ASCII}]", "")) ve aksanlara ihtiyacınız yoksa (tıpkı örneğiniz gibi) daha etkilidir .

Aksi takdirde, p {ASCII} desenini kullanmanız gerekir.

Saygılarımızla.


0

En iyi çözüm her karakter HEX dönüştürmek ve başka bir HEX ile değiştirmek olduğunu düşünüyorum. Bunun nedeni 2 Unicode yazımı olmasıdır:

Composite Unicode
Precomposed Unicode

Örneğin, Kompozit Unicode tarafından yazılan "Ồ", Önceden Oluşturulmuş Unicode tarafından yazılan "Ồ" den farklıdır. Örnek grafiklerimi kopyalayabilir ve farkı görmek için dönüştürebilirsiniz.

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

Bazı bankalar için bilgileri çekirdek bankaya göndermeden önce dönüştürmek için bu özelliği geliştirdim (genellikle Unicode'u desteklemez) ve son kullanıcılar verileri girmek için birden fazla Unicode yazmayı kullandığında bu sorunla karşılaştım. Bence, HEX'e dönüştürmek ve değiştirmek en güvenilir yoldur.


-1

Herkes kotlin bunu yapmak için mücadele, bu kod bir cazibe gibi çalışır. Tutarsızlıkları önlemek için ayrıca .toUpperCase ve Trim () kullanıyorum. sonra ben bu işlevi döküm:

   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()

}

bu eğlenceyi kullanmak için kodu şöyle attı:

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

     str = stripAccents(str) //call the function
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.