0
votes

Comment stocker des données de fichiers .txt séparés par des virgules ignorant l'espace vide derrière les virgules

J'ai deux problèmes.

  1. Alors, le fichier .txt est comme ceci: li> ol>

    1, 2, 2.0, voiture, 3, 4,20, maison, 7, 8.2, 19, film, 3,1, 45 Code> P>

    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 .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> xxx pré>

    J'ai lu quelque part que le .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>

    1. J'ai besoin d'aide pour séparer des flotteurs de mots. Jusqu'à présent, j'ai essayé ceci: p>

      try {
          int number = Integer.valueOf(entry);
          float decimalNumber = Float.parseFloat(entry);
          numbersList.add(number);
          decimalNumbersList.add(decimalNumber);
      } catch (NumberFormatException e) {
      
          wordsList.add(entry);
      }
      


2 commentaires

Split par "," puis utilisez la méthode de la chaîne de chaîne pour supprimer WhitSpace


@Dustinnieffenegger fonctionne bien, mais la réponse de Faewzx est mieux adaptée à mon problème


3 Réponses :


2
votes

Utilisez REGEX

data = str.split(", ?");


0 commentaires

1
votes

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());


2 commentaires

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.



2
votes

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 code>. P>

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


0 commentaires