簡體   English   中英

如何在Java字符串中的每個“,”之前輸入“。”兩個空格

[英]How do I enter a “.” 2 spaces before every “,” in a Java string

我的Java項目中有一個字符串,看起來像這樣
9201,92710,94500,920,1002

如何在逗號前2個地方輸入點? 所以看起來像這樣:
920.1,9271.0,9450.0,92.0,100.2

我曾嘗試過,但無法獲得最后一個數字來得到一個點。

numbers = numbers.replaceAll("([0-9],)", "\\.$1");

我得到的結果是
920.1,9271.0,9450.0,92.0,1002

注意:字符串的長度並不總是相同。 它可以更長或更短。

  1. 檢查字符串是否以“,”結尾。 如果不是,請在字符串后附加“,”,然后運行相同的replaceAll,從字符串末尾刪除“,”。
  2. 用“,”分隔符分割字符串,處理每一個加“。”的部分。 在需要的地方。
  3. 只需添加一個“。” 在numbers.length-1上解決最后一個數字的問題

因為您的問題不僅是在每個逗號之前插入點,而且還在字符串的末尾 之前插入點,所以您只需要將此附加條件添加到捕獲組中即可:

numbers = numbers.replaceAll("([0-9](,|$))", "\\.$1");

正如Siguza所建議的,您也可以使用一個非捕獲組 ,它甚至比捕獲組中的“人類”所期望的還要多:

numbers = numbers.replaceAll("([0-9](?:,|$))", "\\.$1");

但是,由於非捕獲組不是標准Regex(盡管這是一個非常不錯的功能),並且開銷在這里並不重要,所以我建議使用第一個選項。

您可以使用單詞邊界:

numbers = numbers.replaceAll("(\\d)\b", ".$1");

只要您像dan所說的那樣在末尾加上逗號,您的解決方案就可以了。 所以代替:

numbers = numbers.replaceAll("([0-9],)", "\\.$1");

寫:

numbers = (numbers+",").replaceAll("([0-9],)", "\\.$1");
numbers = numbers.substring(0,numbers.size()-1);

您可以使用正向超前查詢來檢查整個匹配項的數字和第零向后引用之后的,或字符串的結尾:

String s = "9201,92710,94500,920,1002";
System.out.println(s.replaceAll("\\d(?=,|$)", ".$0"));
// => 920.1,9271.0,9450.0,92.0,100.2

請參閱Java演示regex演示

詳細資料

  • \\\\d正好1位數...
  • (?=,|$) -必須在字符串,或字符串( $ )的末尾。

捕獲版本( Java演示 ):

String s = "9201,92710,94500,920,1002";
System.out.println(s.replaceAll("(\\d)(,|$)", ".$1$2"));

您在哪里可以使用replaceAll方法。 但是您的正則表達式與字符串的末尾(最后一組數字)不匹配。

這是我對您的問題的看法:

  public static void main(String[] args) {
    String numbers = "9201,92710,94500,920,1002";
    System.out.println(numbers.replaceAll("(\\d,|\\d$)", ".$1"));
  }

正則表達式(\\\\d,|\\\\d$)匹配一個數字,后跟一個逗號\\d, ,或| 一個數字,后跟字符串\\d$的末尾。 我已經對其進行了測試,發現可以正常工作。

正如其他人建議的那樣,您可以在末尾添加逗號,運行全部替換,然后將其刪除。 但這似乎是額外的努力。 例:

  public static void main(String[] args) {
    String numbers = "9201,92710,94500,920,1002";
    //add on the comma
    numbers += ",";

    numbers = numbers.replaceAll("(\\d,)", "\\.$1");

    //remove the comma
    numbers = numbers.substring(0, numbers.length()-1);
    System.out.println(numbers);
  }

暫無
暫無

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

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