0
votes

Comment vous assurer qu'une chaîne contient un mot entier non seulement une partie de celui-ci

J'ai besoin d'un code pour vous assurer que si un mot entier existe dans un fichier texte de retour formaté, il est accepté et que, si seulement une partie de celle-ci est présente, elle n'est pas prise en compte.

Si je tape Lau dans le Textfield Il est accepté et je préférerais que la réponse était fausse jusqu'à ce qu'un mot entier soit assorti p>

voici le fichier limitée.txt que j'utilise dans mon projet. Chaque mot est sur une ligne séparée: appétitif apéritif appétitos appétiser appétisé apéritif apéritif apéritifs appétissant appétissant appellé appoint appliquer applaudir applaudissement applaudir applaudable applaudissablement applaudi applaudeur applaudeurs applaudir applaudissant applaude applaudissements applémus applicieuse agréablement Pomme saleberry appleblossom panier de pommes appliqué applDrane Appledrone arratrower cidre fort Applejohn AppleMonger p>

Merci pour votre aide P>

import SwiftUI

struct ContentView: View{
    @ObservedObject var textFileStringContent: TexFileReader
    @State private var text = ""

    var body: some View{
        VStack {
            TextField("please type the word to check", text: $text)
            // so that it does not matter if user capitalises a word
            if textFileStringContent.data.contains(self.text.lowercased()) {
                Text("part of it exists")
                
                // I tried to code it in here but to no avail
                // if it is a whole word {
                // Text("congratulations it does exist")
                // }
                
            } else if !text.isEmpty {
                Text("sorry no such word")
            }
        }.padding().font(.headline)
            .navigationBarTitle("Word checker")
    }
}

class TexFileReader: ObservableObject {
    @Published var data: String = ""
    
    init() { self.load(file: "limited") }
    func load(file: String) {
        if let filepath = Bundle.main.path(forResource: file, ofType: "txt") {
            do {
                let contents = try String(contentsOfFile: filepath)
                DispatchQueue.main.async {
                    self.data = contents
                    
                     print(self.data.contains("lau"))
                    // this prints true even if lau is not a whole word
                    // applaud
                    // applaudable
                    // applaudably
                    // applauded
                    // applauder
                    // applauders
                    // applauding
                    // applaudingly
                    // applauds
                    // applause
                    // applauses
                    // applausive
                    // applausively
                    // but present in each of these
                    // I need to make sure that the match is a whole word not just part of one
                   
                    
                }
            } catch let error as NSError {
                print(error.localizedDescription)
            }
        } else {
            print("File not found")
        }
    }
}


1 commentaires

Merci aux trois. C'était agréable de se réveiller ce matin pour trouver de l'aide. J'ai d'abord mis en œuvre la solution de Vadian et cela fonctionnait parfaitement pour que je n'ai jamais examiné les deux autres. Passez une bonne journée vous tous.


3 Réponses :


0
votes

Vous pouvez vérifier si cela se termine par un séparateur de nouvelle ligne dans votre fichier texte: xxx


1 commentaires

Ou nous pouvons réduire la nouvelle ligne et l'espace pour les deux textes avant de comparer. TarçonCharacters (dans: .whitespacesandnewlines)



1
votes

Une manière possible est de rechercher une expression régulière et le spécificateur de limite de mot \\ b xxx


0 commentaires

0
votes

fondation contient un moteur d'analyse de langue nslinguisticicger qui peut faire de nombreuses choses, y compris la recherche de mots spécifiques avec la sensibilité locale.

Une simple mise en œuvre de ce que vous essayez de faire est: xxx

énumérateTags renvoie un nsrange qui peut être converti en plage pour UTILISATION GÉNÉRALE SWIFT.


1 commentaires

Ne créez jamais nsrange à partir d'une chaîne SWIFT avec nsrange (emplacement: longueur :) . Il y a une API commode. S'il vous plaît voir Stackoverflow.com/questions/15062458/... . Le pont Nstring n'est pas nécessaire non plus.