[英]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
注意:字符串的長度並不總是相同。 它可以更長或更短。
因為您的問題不僅是在每個逗號之前插入點,而且還在字符串的末尾 之前插入點,所以您只需要將此附加條件添加到捕獲組中即可:
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
詳細資料 :
\\\\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.