Je veux extraire le nombre et ajouter ces nombres en utilisant Java et la chaîne reste même.Comment extraire le nombre et la chaîne dans Java
Chaîne AS-
String msg="1,2,hello,world,3,4";
sortie devrait venir comme- 10, bonjour, monde
Merci
Je veux extraire le nombre et ajouter ces nombres en utilisant Java et la chaîne reste même.Comment extraire le nombre et la chaîne dans Java
Chaîne AS-
String msg="1,2,hello,world,3,4";
sortie devrait venir comme- 10, bonjour, monde
Merci
String[] parts = msg.split(",");
int sum = 0;
StringBuilder stringParts = new StringBuilder();
for (String part : parts) {
try {
sum += Integer.parseInt(part);
} catch (NumberFormatException ex) {
stringParts.append("," + part);
}
}
stringParts.insert(0, String.valueOf(sum));
System.out.println(stringParts.toString()); // the final result
Notez que la pratique ci-dessus en utilisant des exceptions que le flux de contrôle doit être évité presque toujours. Ce cas concret est je crois une exception, car il n'y a pas de méthode qui vérifie la "parsabilité" de la chaîne. S'il y avait Integer.isNumber(string)
, alors ce serait le chemin à parcourir. En fait, vous pouvez créer une telle méthode utilitaire. Vérifiez this question.
Ne pas se fier aux exceptions pour contrôler le flux du programme est une mauvaise pratique? Dans le cas contraire, cela ressemble à une solution assez simple et simpliste avec une complexité proche de zéro. – vstoyanov
@vstoyanov il y avait une discussion sur ce cas spécifique (avec des numéros d'analyse/date), laissez-moi le trouver. Généralement, oui, c'est une mauvaise pratique de s'appuyer sur des exceptions, mais puisqu'il n'y a aucune méthode pour vérifier la parsabilité. – Bozho
Merci pour la réponse. –
String pieces[] = msg.split(",");
int sum=0;
StringBuffer sb = new StringBuffer();
for(int i=0;i < pieces.length;i++){
if(org.apache.commons.lang.math.NumberUtils.isNumber(pieces[i])){
sb.appendpieces[i]();
}else{
int i = Integer.parseInt(pieces[i]));
sum+=i;
}
}
System.out.println(sum+","+sb.);
}
-1 N'utilisez jamais d'exceptions pour le contrôle de flux! – helpermethod
@Helper Méthode FYI mis à jour le code. –
+1 pour 'isNumber' – Bozho
Voici une très simple version regex:
/**
* Use a constant pattern to skip expensive recompilation.
*/
private static final Pattern INT_PATTERN = Pattern.compile("\\d+",
Pattern.DOTALL);
public static int addAllIntegerOccurrences(final String input){
int result = 0;
if(input != null){
final Matcher matcher = INT_PATTERN.matcher(input);
while(matcher.find()){
result += Integer.parseInt(matcher.group());
}
}
return result;
}
Code d'essai:
public static void main(final String[] args){
System.out.println(addAllIntegerOccurrences("1,2,hello,world,3,4"));
}
Sortie:
Avertissements:
Cela ne fonctionnera pas si le n les ombres s'ajoutent à quelque chose de plus grand que Integer.Max_VALUE
, évidemment.
tous sont reclus par commma? –
Je crois qu'une expression régulière fera l'affaire ici. – Sid