用破折号将前导零替换为小数点

时间:2016-12-23 00:41:44

标签: java regex formatting

如果字符串为a = 000102.45600。我需要将其转换为a = ---102.45600。 使用正则表达式或String格式化程序的java中的任何帮助?

尝试以下方法:

a = a.replaceFirst("^0+(?!$)","-");

但我只获得a = -102.45600而不是3个破折号。

规则:字符串中十进制前的任何前导零都应该被那么多破折号替换。

  1. 000023.45677----23.45677

  2. 002345.56776--2345.56776

  3. 00000.45678-----.45678

  4. 希望我清楚我的需要是什么?

3 个答案:

答案 0 :(得分:5)

String subjectString = "000102.45600";
String resultString = subjectString.replaceAll("\\G0", "-");
System.out.println(resultString); // prints ---102.45600

\G\A的第一次迭代中表现为replaceAll()(字符串起始锚点),但在后续传递中,它将匹配锚定到上一个匹配的位置结束。这可以防止它在字符串中的任何其他位置匹配零,如小数点后。

请参阅:参考SO answer

答案 1 :(得分:0)

这应该这样做:

String number = //assign a value here
    for (int i=number.length();i>0; i--) {
        if (number.substring(0,i).matches("^0+$")) {
            System.out.println(number.replaceAll("0","-"));
            break;
        }
    }

这将搜索number的最长子字符串,它从索引0开始并完全由零组成 - 首先检查整个字符串,然后将其缩短,直到找到前导零的最长子字符串。一旦找到这个子字符串,它就会用短划线替换每个零点并突破循环。

答案 2 :(得分:-2)

为什么不将字符串的开头转换为"。"到一个整数,将其转换回字符串然后比较长度。 000102长度= 6. 102长度= 3.您将有前面的零计数。