J'ai deux problèmes.
J'ai besoin de séparer ces chiffres et mots, et mettez-les dans des listes séparées, mais cela ne fonctionne que lorsque j'utilise le J'ai lu quelque part que le J'ai besoin d'aide pour séparer des flotteurs de mots. Jusqu'à présent, j'ai essayé ceci: p>
1, 2, 2.0, voiture, 3, 4,20, maison, 7, 8.2, 19, film, 3,1, 45 Code> P> .split (","); code> méthode, et il ne met pas les chiffres qui n'ont pas de Espace vide derrière les virgules dans la liste de mes numéros. Mon code: p> .split (); code> Ignorait automatiquement les espaces vides, mais cela ne semble pas Soyez le cas, car je reçois cette sortie: p> numériquesList - 1, 2, 3, 7, 19, 45 Code> P> Liste de mots - 2.0, voiture, 4,20, maison, 8.2, film, 3,1 code> p>
try {
int number = Integer.valueOf(entry);
float decimalNumber = Float.parseFloat(entry);
numbersList.add(number);
decimalNumbersList.add(decimalNumber);
} catch (NumberFormatException e) {
wordsList.add(entry);
}
3 Réponses :
Utilisez REGEX
data = str.split(", ?");
On dirait essentiellement que vous souhaitez créer une liste séparée pour tous les types d'éléments. J'utiliserais ci-dessous approche pour créer une liste distincte pour tous les types de données de votre programme:
if (scanner.hasNextInt()) numbersList.add(scanner.nextInt()); else if (scanner.hasNextDouble()) doublesList.add(scanner.nextDouble()); else wordsList.add(scanner.next());
Les méthodes booléennes fonctionnent bien, mais je cherche quelque chose de plus subtil ... La réponse de VS97 est plus adaptée à mes problèmes, mais merci pour votre temps et votre aide, c'est bon d'avoir quelques angles de vue différents à une solution
Oui, vous avez raison mais au-dessus de la solution devrait fonctionner correctement, il y avait peu de fautes de frappe auparavant que j'ai réparées maintenant. Cela pourrait être une raison pour laquelle vous avez eu des problèmes lors de l'exécution.
Pour la première partie, j'ai décidé de simplement retirer les espaces blancs, puis d'analyser ",". Mais d'autres approches bonnes ont été suggérées, ce sont bien aussi.
Pour séparer le flotteur des chaînes, je passe par chaque entrée de données et vérifiez s'il contient le symbole du délimètre flottant ("."). Si c'est le cas, vérifiez que c'est un flotteur et l'ajoutez à la liste des chiffres. AVIS NUMÉROLIST CODE> est un ArrayList public static void main(String[] args) throws Exception {
File file = new File("path");
BufferedReader br = new BufferedReader(new FileReader(file));
String str;
String[] data = null;
ArrayList<Number> numbersList = new ArrayList<>();
ArrayList<String> wordsList = new ArrayList<>();
//Remove white space and split by comma
while ((str = br.readLine()) != null) {
str = str.replaceAll(" ", "");
data = str.split(",");
}
assert data != null;
for (String entry : data) {
//check for floats
if(entry.contains(".")){
try {
//Check if we can parse
float d = Float.parseFloat(entry);
//Add to numbers list.
numbersList.add(d);
} catch (NumberFormatException e) {
e.printStackTrace();
}
//Else, handle the rest
} else {
try {
int number = Integer.valueOf(entry);
numbersList.add(number);
} catch (NumberFormatException e) {
wordsList.add(entry);
}
}
}
System.out.println(numbersList);
System.out.println(wordsList);
}
Split par "," puis utilisez la méthode code> de la chaîne de chaîne CODE> pour supprimer WhitSpace
@Dustinnieffenegger fonctionne bien, mais la réponse de Faewzx est mieux adaptée à mon problème