import com.sun.deploy.util.StringUtils;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class FrenchTranslator {
private static final String EMPTY_SPACE = " ";
private static final Map<String, Integer> frenchNumbers = new HashMap<String, Integer>() {{
put("un", 1);
put("deux", 2);
put("trois", 3);
put("quatre", 4);
put("cinq", 5);
}};
public static void main(String[] args) {
String frenchSentence = "J'ai cinq tomates.";
System.out.println("INPUT: " + frenchSentence);
List <String> words = extractWordsFromFrenchSentence(frenchSentence);
String translatedSentence = createTranslatedSentence(words);
System.out.println("OUTPUT:" + translatedSentence);
}
private static List <String> extractWordsFromFrenchSentence(String frenchSentence){
return Arrays.asList(StringUtils.splitString(frenchSentence, EMPTY_SPACE));
}
private static String createTranslatedSentence( List <String> words){
StringBuilder translatedSentence = new StringBuilder();
words.forEach(word -> {
if(frenchNumbers.containsKey(word)){
translatedSentence.append(EMPTY_SPACE + frenchNumbers.get(word));
}
else {
translatedSentence.append(EMPTY_SPACE + word);
}
});
return translatedSentence.toString();
}
}
How the algorithm works:
INPUT: J'ai cinq tomates.
OUTPUT: J'ai 5 tomates
From what I understood, you want to detect a written number in a french sentence.
I don't know your precise requirements but in order to help you I have written an algorithm which translates written French numbers (from 1-5) into natural numbers and then recreates the original sentence.