如何用Java中的新数组替换旧数组的正则表达式匹配?

时间:2011-12-16 07:28:57

标签: java regex

我有一个正则表达式模式:

'/(?:&#\d{2,4};)|(\d+[\.\d]*)|(?:[a-z](?:[\x00-\x3B\x3D-\x7F]|<\s*[^>]+>)*)|<\s*[^>]+>/i'

我想在任何字符串中用array2替换array1,如何使用此正则表达式将array1元素替换为array2元素?

String[] array1 = String[] {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};

String[] array2 = String[] {"۰", "۱", "۲", "۳", "۴", "۵", "۶", "۷", "۸", "۹"};

2 个答案:

答案 0 :(得分:2)

嗯,你不需要使用正则表达式,或类似的东西。您甚至不需要使用任何特殊功能。

String[] array1 = String[] {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};

好好看看这个数组。为方便起见,0的索引为01的索引为1等。

所以你可以这样做,(伪代码):

foreach(char in stringToBeReplaced)
{
  if(char == an ASCII digit)
  {
     char = array2[array1.findIndexOf(char)];
  }
}

就是这样。我会把细节留给你。

答案 1 :(得分:0)

好像你想把波斯语翻译成英文......

正则表达式不是最好的解决方案。 看看这个问题:Convert String to another locale in java

public static void main(String... args) {
    System.out.println(arabicToDecimal("۴۲"));
}

private static final String arabic = "\u06f0\u06f1\u06f2\u06f3\u06f4\u06f5\u06f6\u06f7\u06f8\u06f9";
private static String arabicToDecimal(String number) {
    char[] chars = new char[number.length()];
    for(int i=0;i<number.length();i++) {
        char ch = number.charAt(i);
        int index = arabic.indexOf(ch);
        if (index >= 0)
            ch = (char) (index + '0');
        chars[i] = ch;
    }
    return new String(chars);
}