找到了解决您问题的方法。
基于这个SO答案,我制作了一个使用正则表达式字符类来搜索可能具有可选修饰符的字母的程序。它将您的字符串拆分为单个(如有必要,可合并)字符并将它们放入列表中:
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}表示Unipre字母,
\p{M}表示Unipre标记。
该代码段的输出为:
குமார்String length: 3
有关有效的演示,请参见https://ideone.com/Apkapn
编辑
现在,我使用从http://en.wikipedia.org/wiki/Tamil_script中的表格中提取的所有有效的泰米尔语字母来检查我的正则表达式。我发现在当前的正则表达式中,我们无法正确捕获所有字母(Grantha复合表中最后一行的每个字母都分成两个字母),因此我将正则表达式细化为以下解决方案:
Pattern pat = Pattern.compile("u0B95u0BCDu0BB7\p{M}?|\p{L}\p{M}?");
使用这种模式而不是上面的模式,您应该可以将句子拆分为每个有效的泰米尔语字母(只要维基百科的表格完整)。
我用于检查的代码如下:
String s = "ஃஅஆஇஈஉஊஎஏஐஒஓஔக்ககாகிகீகுகூகெகேகைகொகோகௌங்ஙஙாஙிஙீஙுஙூஙெஙேஙைஙொஙோஙௌச்சசாசிசீசுசூசெசேசைசொசோசௌஞ்ஞஞாஞிஞீஞுஞூஞெஞேஞைஞொஞோஞௌட்டடாடிடீடுடூடெடேடைடொடோடௌண்ணணாணிணீணுணூணெணேணைணொணோணௌத்ததாதிதீதுதூதெதேதைதொதோதௌந்நநாநிநீநுநூநெநேநைநொநோநௌப்பபாபிபீபுபூபெபேபைபொபோபௌம்மமாமிமீமுமூமெமேமைமொமோமௌய்யயாயியீயுயூயெயேயையொயோயௌர்ரராரிரீருரூரெரேரைரொரோரௌல்லலாலிலீலுலூலெலேலைலொலோலௌவ்வவாவிவீவுவூவெவேவைவொவோவௌழ்ழழாழிழீழுழூழெழேழைழொழோழௌள்ளளாளிளீளுளூளெளேளைளொளோளௌற்றறாறிறீறுறூறெறேறைறொறோறௌன்னனானினீனுனூனெனேனைனொனோனௌஶ்ஶஶாஶிஶீஶுஶூஶெஶேஶைஶொஶோஶௌஜ்ஜஜாஜிஜீஜுஜூஜெஜேஜைஜொஜோஜௌஷ்ஷஷாஷிஷீஷுஷூஷெஷேஷைஷொஷோஷௌஸ்ஸஸாஸிஸீஸுஸூஸெஸேஸைஸொஸோஸௌஹ்ஹஹாஹிஹீஹுஹூஹெஹேஹைஹொஹோஹௌக்ஷ்க்ஷக்ஷாக்ஷிக்ஷீக்ஷுக்ஷூக்ஷெக்ஷேக்ஷைஷொக்ஷோஷௌ";List<String> characters = new ArrayList<String>();Pattern pat = Pattern.compile("u0B95u0BCDu0BB7\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);
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)