在下面的编码中,我尝试读取具有特定长度的行并在另一个记事本上写入。这种编码适用于英文字符。但对于泰米尔语字母,如果我试图计算......它算作:
(例如)தமிழ்
它计为5 ..(即)"த","ம","ி","ழ"和"்"。 但我想把它算作3(即)"த","மி"和"ழ்"
我想将此逻辑应用于文本文件中的多个单词....
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
public class ii {
public static void main(String[] args) {
FileReader fr = null;
BufferedReader br =null;
FileWriter fw=null;
BufferedWriter bw=null;
String [] stringArray;
int counLine = 0;
int arrayLength ;
String s="";
String stringLine="";
try{
fr = new FileReader("F:\\New folder (2)\\N.txt");
fw=new FileWriter("F:\\New folder (2)\\o.txt");
br = new BufferedReader(fr);
bw=new BufferedWriter(fw);
while((s = br.readLine()) != null){
stringLine = stringLine + s;
stringLine = stringLine + " ";
counLine ++;
}
stringArray = stringLine.split(" ");
arrayLength = stringArray.length;
for (int i = 0; i < arrayLength; i++) {
int c = 1 ;
for (int j = i+1; j < arrayLength; j++) {
if(stringArray[i].equalsIgnoreCase(stringArray[j])){
c++;
for (int j2 = j; j2 < arrayLength; j2++)
{
}}
int k;
for(k=2;k==stringArray[i].length();i++)
{
bw.write(stringArray[i]);
bw.newLine();
}}} fr.close();
br.close();
bw.flush();
bw.close();
}catch (Exception e) {
e.printStackTrace();
}}}
答案 0 :(得分:1)
一种方法是使用BreakIterator迭代字符,并自己计算。 (未经测试的代码)
int characterCount = 0;
BreakIterator iterator = BreakIterator.getCharacterInstance();
iterator.setText("தமிழ்");
int boundary = iterator.first();
while (boundary != BreakIterator.DONE) {
characterCount++;
boundary = iterator.next();
}
另见http://docs.oracle.com/javase/tutorial/i18n/text/char.html
答案 1 :(得分:0)
基本上这是由编码问题引起的,所以首先按照以下步骤更改java项目的文本文件编码
右键单击您的项目Name =&gt; select properties =&gt; select resource =&gt; Text File encoding =&gt;选择其他并选择UTF-8作为编码,
这将解决您的问题。
答案 2 :(得分:0)
默认情况下,记事本不支持UTF字符。相反,它支持ANSI。但是问题不在于此。
您的程序应该知道在阅读或写作时要使用的编码方式。没有魔力。您需要设置编码(例如 - UTF8)。 FileReader的结构采用默认的平台编码,显然不会为你工作。
我想你需要 -
Reader reader = new InputStreamReader(new FileInputStream("c:/foo.txt"), "UTF-8");
Read file and write file which has characters in UTF - 8 (different language)
答案 3 :(得分:0)
这是因为字符串计数unicode标记和unicode字母。要忽略unicode标记,可以使用正则表达式,如下所示
import java.util.regex.*;
......
String word = "தமிழ்";
String regex = "[^\u0bbe-\u0bcd.]";
Pattern r = Pattern.compile(regex);
Matcher m = r.matcher(word);
int count=0;
while (m.find())count++;
System.out.print(count);