String numbers computator

Contenu du snippet

Cette classe permet simplement d'appliquer une fonction (simple ou complexe : de int -> vers int) à l'ensemble des nombres contenus dans une chaine.

Source / Exemple :


///////// classe StringNumbersComputator

package com.gmail.bernabe.laurent.j2se.utils;

import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**

  • Une classe qui applique une fonction a tous les nombres
  • contenus dans une chaine.
  • @author laurent BERNABE
*
  • /
public class StringNumbersComputator { public StringNumbersComputator(NumberFunction function){ this.function = function; } public void setFunction(NumberFunction function){ this.function = function; } public String computeNumbers(String s){ stringNumbers.clear(); Matcher m = p.matcher(s); String stringFormat = s.replaceAll(numberRegex, "%d"); while (m.find()){ Integer parameterValue = Integer.parseInt(m.group()); stringNumbers.add(function.compute(parameterValue)); } Integer parametersValuesArray [] = new Integer[stringNumbers.size()]; stringNumbers.toArray(parametersValuesArray); return String.format(stringFormat, (Object []) parametersValuesArray); } public static void main(String[] args) { System.out.println( new StringNumbersComputator(new NumberFunction() { @Override public int compute(int x) { return x%20*x; } }).computeNumbers("[1+22*333]") ); } private NumberFunction function; private ArrayList<Integer> stringNumbers = new ArrayList<Integer>(); private String numberRegex = "\\d+"; private Pattern p = Pattern.compile(numberRegex); } //////// classe NumberFunction package com.gmail.bernabe.laurent.j2se.utils; /**
  • Cette interface schematise une fonction mathematique d'une seule variable
  • @author laurent BERNABE
*
  • /
public interface NumberFunction { int compute(int x); }

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.