Java: essayez d'implémenter vous-même un formateur séparé par des virgules

Au début

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

Politique de mise en œuvre

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

J'ai essayé de mettre en œuvre

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

Résultat d'exécution

11
111
1,111
11,111
111,111

Impressions

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

Java: essayez d'implémenter vous-même un formateur séparé par des virgules
Créez vos propres annotations Java
Essayez d'implémenter Android Hilt en Java
Créez votre propre FW de persistance (Java)
Gérez vos propres annotations en Java
Essayez d'organiser votre propre orientation d'objet
Comprenez l'interface java à votre manière
Essayez Java 8 Stream
Créez votre propre application Android pour l'apprentissage Java
Essayez grossièrement Java 9
[Java] Trier ArrayList avec des éléments de votre propre classe
Essayez d'implémenter le tamis Eratostenes en utilisant la bibliothèque standard de Java
Il est tard! Essayez d'implémenter la notification Android en Java (débutant)
Faites votre propre pomodoro
Essayez la valeur de retour Java
Comment lire votre propre fichier YAML (*****. Yml) en Java
Il est tard! Essayez d'implémenter Android Work Manager en Java (débutant)
Implémentons la vérification de signature du code de courbe elliptique en Java
Créez votre propre serveur simple avec Java et comprenez HTTP
Java: démarrez WAS avec Docker et déployez votre propre application