Android 字符串中数字替换为阿拉伯语或波斯语

Android 字符串中数字替换为阿拉伯语或波斯语

前言

在开发中需要将字符串中的数字转成波斯语中的数字,随后便写下了这篇文章,希望有所帮助

使用

直接上代码

import android.text.TextUtils;
import android.util.Log;

import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @author huyl
 * @date 2022/10/11 14:24
 *
 * <p>
 */
public class LanguageFormatHelper {
    private static final String TAG = "LanguageFormatHelper";
    //这里在每个字符前后拼接unicode是防止appendReplacement方法导致字符反转
    private static String[] AF09 = new String[]{"\u202D٠\u202C", "\u202D١\u202C", "\u202D٢\u202C", "\u202D٣\u202C", "\u202D۴\u202C",
            "\u202D۵\u202C", "\u202D۶\u202C", "\u202D٧\u202C", "\u202D٨\u202C", "\u202D٩\u202C"};

    /**
     * 将字符串中的0-9转为波斯语 其他语言暂时不管
     * @return 
     */
    public static String toAFStr(String value) {
        String locale = Locale.getDefault().toString();
        Log.d(TAG, "toAFStr: value = " + value + ", locale = " + locale);
        //这里是判断语言是否为波斯语  不是则不做转换
        if (TextUtils.isEmpty(value) || !"fa_AF".equals(locale)) {
            return value;
        }
        try {
            String patt = "\\d";//找出所有数字
            Pattern r = Pattern.compile(patt);
            Matcher m = r.matcher(value);
            m.reset();
            StringBuffer sb = new StringBuffer();
            while (m.find()) {
                //拿出匹配到的数字
                String group = m.group();
                int v = Integer.valueOf(group);
                m.appendReplacement(sb, AF09[v]);
            }
            return m.appendTail(sb).toString();
        } catch (Exception e) {
            e.printStackTrace();
            Log.d(TAG, "toAFStr: e = " + e.getMessage(), e);
            return value;
        }
    }

    /**
     * 纯数字文本请使用这个方法 自带String.format可以根据语音自动转换
     * @param value
     * @return
     */
    public static String toIntAFStr(String value) {
        String locale = Locale.getDefault().toString();
        Log.d(TAG, "toIntAFStr: value = " + value + ", locale = " + locale);
        //这里是判断语言是否为波斯语  不是则不做转换
        if (TextUtils.isEmpty(value) || !"fa_AF".equals(locale)) {
            return value;
        }
        try {
            int v = Integer.valueOf(value);
            return String.format(Locale.getDefault(), "%d", v);
        } catch (Exception e) {
            e.printStackTrace();
            Log.d(TAG, "toIntAFStr: e = " + e.getMessage(), e);
            return value;
        }
    }

}

结尾

波斯语在使用append中会出现字符串反转,所以左右都有拼接unicode,这里感谢[bug修复方案分享]阿拉伯文导致TextView显示顺序左右颠倒
字符串替换方法感谢Java如何使用正则表达式实现替换文本功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值