在Java中将unicode'Orgar Fractions'解析为double

Mat*_*ams 3 java regex unicode double

我正在抓取网站的一些数据,其中一部分包括unicode中的分数,例如6'5¼".我已成功使用正则表达式(\\d)' (\\d{1,2}([\\xbc-\\xbe])?)\"提取字符串的每个部分.

这给了我两个字符串,一个是"6",另一个是"5¼".

麻烦的部分是包含unicode粗俗部分的位.显然它没有正确解析使用Double.parseDouble.

我到处寻找Java的例子,但一直找不到任何东西,我怎样才能将¼输出为0.25?

如果它更容易,我可以再次分割正则表达式,所以它单独返回分数部分所以我得到三个字符串而不是两个.

bob*_*nce 8

有一种方法可以在没有您自己的粗俗分数表的情况下执行此操作,您可以使用Unicode数据中内置的表.

如果转换为Unicode标准化表格KD,它会将分数分解为由普通数字包围的分数斜杠(U + 2044).所以你可以这样做:

String[] fraction = Normalizer.normalize("¼", Normalizer.Form.NFKD).split("\u2044");
if (fraction.length == 2) {
    double value = (double) Integer.parseInt(fraction[0]) / Integer.parseInt(fraction[1]);
}
Run Code Online (Sandbox Code Playgroud)

有比U + 00BC-U + 00BE范围内更多的分数字符,例如⅛,所以如果你想避免对该范围进行硬编码,我建议将它的正则表达式更改为类似的字符[^\d]?.