使用java进行泰米尔语字符分割

时间:2016-09-16 06:46:57

标签: java

在下面的编码中,我尝试读取具有特定长度的行并在另一个记事本上写入。这种编码适用于英文字符。但对于泰米尔语字母,如果我试图计算......它算作:

(例如)தமிழ்

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

4 个答案:

答案 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);