Voir Moyen simple de mettre une virgule tous les 3 chiffres comme la notation des prix "Si vous écrivez votre propre logique séparée par des virgules sans utiliser le format String # ou Number Format, comment l'implémenteriez-vous?" Cela m'intéressait, alors j'ai essayé de l'implémenter facilement
J'ai l'impression que je peux obtenir un sous-ensemble de 3 chiffres avec une expression régulière et le plier avec réduire. ~~ Si vous le coupez avec tsubstring, le fonctionnement des indices semble gênant ~~ Si le nombre de caractères n'est pas un multiple de 3, il semble que vous deviez entrer de force le zéro précédent
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>();
//Supprimer le 0 précédent
if(matcher.find()) {
strs.add(Integer.parseInt(matcher.group()) + "");
}
while(matcher.find()) {
strs.add(matcher.group());
}
//,Il est plus propre d'utiliser réduire pour ajouter
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
--Java est gênant pour obtenir une sous-chaîne avec une expression régulière, je souhaite que la fonction de groupe renvoie un flux ―― Cette logique semble être applicable lorsque vous souhaitez découper une chaîne de caractères de XX caractères.
Recommended Posts