我正在努力获取unicode字符串的计数,并尝试了各种选择。看起来像是一个小问题,但却大有作为。
在这里,我试图获取字符串str1的长度。我得到的是6。但实际上是3。将光标移到字符串“குமார்”上还会显示为3个字符。
基本上我想测量长度并打印每个字符。如“கு”,“மா”,“ர்”。
public class one {
public static void main(String[] args) {
String str1 = new String("குமார்");
System.out.print(str1.length());
}
}
PS:这是泰米尔语。
找到了解决您问题的方法。
基于这个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}
表示Unicode字母,\\p{M}
表示Unicode标记。
该代码段的输出为:
கு
மா
ர்
String length: 3
有关有效的演示,请参见https://ideone.com/Apkapn
编辑
现在,我使用从http://en.wikipedia.org/wiki/Tamil_script中的表格中提取的所有有效的泰米尔语字母来检查我的正则表达式。我发现在当前的正则表达式中,我们无法正确捕获所有字母(Grantha复合表中最后一行的每个字母都分成两个字母),因此我将正则表达式细化为以下解决方案:
Pattern pat = Pattern.compile("\u0B95\u0BCD\u0BB7\\p{M}?|\\p{L}\\p{M}?");
使用这种模式而不是上面的模式,您应该可以将句子拆分为每个有效的泰米尔语字母(只要维基百科的表格完整)。
我用于检查的代码如下:
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);
要求出字符串的长度(字符的个数),我们可以使用length函数。调用这个函数的语法和我们前面看到的有点不同: int length; length = fruit.length(); 对于这种函数调用,我们称之为在字符串变量fruit上**调用(invoke)**length函数。“调用(invoke)”这个词可能看起来有点奇怪,但是后面我们还会遇到很多在对象上调用函数的例子。 函数调用的语法称
问题内容: 如果长度超过10个字符,我想修剪字符串。 假设字符串长度为12(),则新的修剪后的字符串将包含。 我该如何实现? 问题答案: s = s.substring(0, Math.min(s.length(), 10)); 这样使用字符串可以避免在字符串已经短于的情况下出现异常。 笔记: 上面做了真正的修剪。如果您实际上想将截断的最后三个(!)字符替换为点,请使用Apache Commons
大家好。我必须制作这个程序,输入一个文本,输出有多少个单词,以及有多少个长度为1、2等的单词。我已经完成了计算单词数的程序,但对于第二部分我不知道。非常感谢任何能帮忙的人。
问题内容: 有没有办法在不知道字符串长度的情况下,将一个字符长的字符串切成4个字符串,每个字符长? 例如: 问题答案:
问题内容: 我正在寻找一种方法来限制php中的字符串,并在字符串过长时在末尾添加…。 问题答案: 您可以使用类似于以下内容的东西:
我正在努力获取unicode字符串的计数,并尝试了各种选项。看起来是个小问题,但影响很大。 这里我试图得到字符串str1的长度。我得到的是6分。但实际上是3。将光标移到字符串上“குமார்“也显示为3个字符。 基本上我想测量长度并打印每个字符。像 "கு", "மா", "ர்" . 附言:这是泰米尔语。