SORU
11 NİSAN 2013, PERŞEMBE


Dize uzunluğu Java Unicode

Sabit unicode dize sayısını almaya çalışıyorum ve çeşitli seçenekler denedim. Küçük bir sorun gibi görünüyor ama büyük bir şekilde vurdu.

Burada uzunluğu dize str1 almak için çalışıyorum. 6 olarak alıyorum. Ama aslında 3. "குமார்" da 3 karakter olarak gösterir. string üzerinde imleci hareket

Temelde boyunu ölçmek ve her bir karakteri yazdırmak istiyorum. "கு", "மா", "ர்" gibi .

 public class one {
    public static void main(String[] args) {
            String str1 = new String("குமார்");
            System.out.print(str1.length());
    }
}

PS : tamil dili.

CEVAP
11 NİSAN 2013, PERŞEMBE


Senin sorunun için bir çözüm buldum.

this SO answer temel düzenli ifade karakter sınıfları isteğe bağlı değiştirici olabilir harfleri aramak için kullandığı bir program yaptım. Tek (gerekirse kombine) karakterleri içine dize böler ve bir liste içine koyar:

import java.util.*;
import java.lang.*;
import java.util.regex.*;

class Main
{
    public static void main (String[] args)
    {
        String s="குமார்";
        List<String> characters=new ArrayList<String>();
        Pattern pat = Pattern.compile("\\p{L}\\p{M}*");
        Matcher matcher = pat.matcher(s);
        while (matcher.find()) {
            characters.add(matcher.group());            
        }

        // Test if we have the right characters and length
        System.out.println(characters);
        System.out.println("String length: "   characters.size());

    }
}

\\p{L} Unicode bir mektup manasına gelir ve \\p{M} Unicode bir işareti anlamına gelir.

Parçacığın çıktı

கு
மா
ர்
String length: 3

Çalışan bir Demo için https://ideone.com/Apkapn bkz


EDİT

Ben şimdi tüm geçerli Tamil harfleri http://en.wikipedia.org/wiki/Tamil_script tablodan da uzağa düzenli kontrol etti. Öğrendim ki geçerli düzenli ifade etmiyoruz yakalama tüm harfleri doğru bir şekilde (her mektubunda, son satırda Grantha bileşik tablo parçalı içine iki harf), bu yüzden rafine benim normal ifade aşağıdaki çözüm:

Pattern pat = Pattern.compile("\u0B95\u0BCD\u0BB7\\p{M}?|\\p{L}\\p{M}?");

Yukarıdaki bir yerine bu model ile her geçerli Tamil mektup (wikipedia tablo tam olarak) cümle bölmek gerekir.

Kontrol için kullandığım kod şu şekildedir:

String s = "ஃஅஆஇஈஉஊஎஏஐஒஓஔக்ககாகிகீகுகூகெகேகைகொகோகௌங்ஙஙாஙிஙீஙுஙூஙெஙேஙைஙொஙோஙௌச்சசாசிசீசுசூசெசேசைசொசோசௌஞ்ஞஞாஞிஞீஞுஞூஞெஞேஞைஞொஞோஞௌட்டடாடிடீடுடூடெடேடைடொடோடௌண்ணணாணிணீணுணூணெணேணைணொணோணௌத்ததாதிதீதுதூதெதேதைதொதோதௌந்நநாநிநீநுநூநெநேநைநொநோநௌப்பபாபிபீபுபூபெபேபைபொபோபௌம்மமாமிமீமுமூமெமேமைமொமோமௌய்யயாயியீயுயூயெயேயையொயோயௌர்ரராரிரீருரூரெரேரைரொரோரௌல்லலாலிலீலுலூலெலேலைலொலோலௌவ்வவாவிவீவுவூவெவேவைவொவோவௌழ்ழழாழிழீழுழூழெழேழைழொழோழௌள்ளளாளிளீளுளூளெளேளைளொளோளௌற்றறாறிறீறுறூறெறேறைறொறோறௌன்னனானினீனுனூனெனேனைனொனோனௌஶ்ஶஶாஶிஶீஶுஶூஶெஶேஶைஶொஶோஶௌஜ்ஜஜாஜிஜீஜுஜூஜெஜேஜைஜொஜோஜௌஷ்ஷஷாஷிஷீஷுஷூஷெஷேஷைஷொஷோஷௌஸ்ஸஸாஸிஸீஸுஸூஸெஸேஸைஸொஸோஸௌஹ்ஹஹாஹிஹீஹுஹூஹெஹேஹைஹொஹோஹௌக்ஷ்க்ஷக்ஷாக்ஷிக்ஷீக்ஷுக்ஷூக்ஷெக்ஷேக்ஷைஷொக்ஷோஷௌ";
List<String> characters = new ArrayList<String>();
Pattern pat = Pattern.compile("\u0B95\u0BCD\u0BB7\\p{M}?|\\p{L}\\p{M}?");
Matcher matcher = pat.matcher(s);
while (matcher.find()) {
    characters.add(matcher.group());
}

System.out.println(characters);
System.out.println(characters.size() == 325);

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MyTiredBones

    MyTiredBones

    2 Temmuz 2013
  • SolidWorksTutoriels

    SolidWorksTu

    14 Kasım 2013
  • TitaniumBackup

    TitaniumBack

    10 EYLÜL 2011