1

我希望使用 hive “printf” 函数,该函数关闭 java格式化程序类,将诸如“1234”之类的字符串转换为“1.2.34”。或者,将“4321”转换为“4.3.21”等。理想情况下,是这样的:

SELECT PRINTF("x.x.xx", "4321");
// -> 4.3.21

这可能吗?如果是这样,格式字符串是什么?

我知道我可以对字符串 concat 做同样的事情,但我宁愿不这样做。我在 hive 工作,“1234”是一个昂贵的正则表达式的结果,我希望在不运行正则表达式三次或使用子查询的情况下一步完成。

编辑:澄清一下,这是在蜂巢中。很抱歉没有提前说清楚。

4

2 回答 2

0
String[] stringArray = "1234".split("");
// This will have a leading array entry of empty string, so chop it off somehow
// EDIT: had the pattern wrong, fixed it
System.out.println(String.format("%s.%s.%s%s", Arrays.copyOfRange(stringArray, 1, stringArray.length)));
于 2012-08-08T20:13:59.650 回答
0

这可能有助于满足进一步的需求。

formatter = new DecimalFormat("#.#");
s = formatter.format(-1234.567);         // -1234.6

编辑。 如果没有小数点,不确定是否可以使用 Formatter 完成此操作。似乎需要对字符串进行一些先前的工作。检查大卫的答案。

于 2012-08-08T19:59:53.867 回答