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