Siehe Einfache Möglichkeit, alle 3 Ziffern ein Komma zu setzen, z. B. Preisnotation "Wenn Sie Ihre eigene durch Kommas getrennte Logik schreiben, ohne das String # -Format oder das Zahlenformat zu verwenden, wie würden Sie sie implementieren?" Das hat mich interessiert, also habe ich versucht, es einfach umzusetzen
Ich habe das Gefühl, ich kann eine Teilmenge von 3 Ziffern mit einem regulären Ausdruck erhalten und mit Reduzieren falten. ~~ Wenn Sie es mit tsubstring ausschneiden, scheint die Bedienung von Indizes problematisch zu sein ~~ Wenn die Anzahl der Zeichen kein Vielfaches von 3 ist, sollten Sie die vorherige Null zwangsweise eingeben
MyFormatter.java
package formatter;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MyFormatter {
public static void main(String[] args) throws Exception{
System.out.println(format("11"));
System.out.println(format("111"));
System.out.println(format("1111"));
System.out.println(format("11111"));
System.out.println(format("111111"));
}
public static String format(String str) {
Matcher matcher = Pattern.compile("(\\d{3})").matcher(makeStr(str));
List<String> strs =new ArrayList<String>();
//Entfernen Sie die vorherige 0
if(matcher.find()) {
strs.add(Integer.parseInt(matcher.group()) + "");
}
while(matcher.find()) {
strs.add(matcher.group());
}
//,Es ist sauberer zu verwenden, um zu reduzieren
return strs
.stream()
.reduce((s,s1)-> s+","+s1)
.get();
}
public static String makeStr(String str) {
if(str.length()%3 ==2)return "0" + str;
else if(str.length()%3 ==1)return "00" + str;
else return str;
}
}
11
111
1,111
11,111
111,111
Recommended Posts