簡體   English   中英

用破折號將前導零替換為小數點

[英]Replace leading zeros till decimal point with dash

如果字符串是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

希望我清楚我的需求是什么?

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

\\GreplaceAll()的第一次迭代中表現為\\A (字符串起始錨),但在后續傳遞中,它將匹配錨定到上一個匹配結束的位置。 這可以防止它在字符串中的任何其他位置匹配零,如小數點后。

參見:參考SO 回答

這應該這樣做:

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;
        }
    }

這將搜索從索引0開始並完全由零組成的number的最長子字符串 - 從檢查整個字符串開始,然后將其縮短,直到找到前導零的最長子字符串。 一旦找到這個子字符串,它就會用短划線替換每個零點並突破循環。

為什么不將字符串的開頭轉換為“。”。 到一個整數,將其轉換回字符串然后比較長度。 000102長度= 6. 102長度= 3.您將具有前面的零計數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM