如何将字符串中的阿拉伯语Unicode字符与Java匹配?

时间:2011-03-28 09:49:45

标签: java regex unicode arabic

问候全部;

我有一个桌面java应用程序,它在控制台窗口中提供以下输出:

[
{
"ew" : "ana"
"hws" : [
"\u0623\u0646\u0627"
]
}
]

我想从整个输出中分离这个字符串:“\ u0623 \ u0646 \ u0627”,以便仅对此字符串进行进一步处理。

我不知道该怎么办?但其中一个想法是使用REGEX。 但我怎么能这样做?

你能帮助我吗?

1 个答案:

答案 0 :(得分:1)

鉴于附加信息

  

输出应为阿拉伯字母   \ u064A ...等。我的想法是搜索   输出直到\ u064A ...行   并将它们转换为阿拉伯语。有你   明白我的观点?我不知道该怎么做   解决这个问题,我是java的初学者。   抱歉有困惑,谢谢   为了你的回应。

输入来自http://www.google.com/transliterate/arabic?tlqt=1&langpair=en|ar&text=ana,m­asry&&tl_app=1你可以这样解决:

import java.net.*;
import java.io.*;
import java.util.*;
import java.util.regex.*;

public class URLConnectionReader {
    public static void main(String[] args) throws Exception {
    URL googleUrl = new URL("http://www.google.com/transliterate/arabic?tlqt=1&langpair=en|ar&text=ana,m­asry&&tl_app=1");
    URLConnection googleUrlc = googleUrl.openConnection();
    BufferedReader in = new BufferedReader(new InputStreamReader(googleUrlc.getInputStream()));
    String inputLine;
    Pattern wordRegex = Pattern.compile("\"(\\\\u[\\da-z]{4})+\"", Pattern.CASE_INSENSITIVE);
    Pattern charRegex = Pattern.compile("\\\\u([\\da-z]{4})", Pattern.CASE_INSENSITIVE);
    while ((inputLine = in.readLine()) != null) {
        Matcher wordMatch = wordRegex.matcher(inputLine);
        for (int i = 0; wordMatch.find(); i++) {
        StringBuffer arabicBuffer = new StringBuffer();
        Matcher charMatch = charRegex.matcher(wordMatch.group());
        for (int j = 0; charMatch.find(); j++) {
            arabicBuffer.appendCodePoint(Integer.valueOf(charMatch.group(1), 16));
        }
        if (0 < arabicBuffer.length()) {
            System.out.println(arabicBuffer.toString());
        }       
        } 
    }
    in.close(); 
    }
}