如果字符串为a = 000102.45600
。我需要将其转换为a = ---102.45600
。
使用正则表达式或String格式化程序的java中的任何帮助?
尝试以下方法:
a = a.replaceFirst("^0+(?!$)","-");
但我只获得a = -102.45600
而不是3个破折号。
规则:字符串中十进制前的任何前导零都应该被那么多破折号替换。
000023.45677
至----23.45677
002345.56776
至--2345.56776
00000.45678
至-----.45678
希望我清楚我的需要是什么?
答案 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.您将有前面的零计数。