Ich möchte die Gesamtzahl der Buchstaben (ohne Leerzeichen) aller lateinischen Namen in der Datendatei ausdrucken. Doppelte Buchstaben müssen gezählt werden. Folgendes habe ich bisher getan:
List<Person> peopleFile = new ArrayList<>();
int numberOfLetters = 0;
try {
BufferedReader br = new BufferedReader(new FileReader("people_data.txt"));
String fileRead = br.readLine();
while (fileRead != null) {
String[] tokenSize = fileRead.split(":");
String commonName = tokenSize[0];
String latinName = tokenSize[1];
Person personObj = new Person(commonName, latinName);
peopleFile.add(personObj);
fileRead = br.readLine();
// Iterating each word
for (String s: tokenSize) {
// Updating the numberOfLetters
numberOfLetters += s.length();
}
}
br.close();
}
catch (FileNotFoundException e) {
System.out.println("file not found");
}
catch (IOException ex) {
System.out.println("An error has occured: " + ex.getMessage());
}
System.out.print("Total number of letters in all Latin names = ");
System.out.println(numberOfLetters);
Das Problem ist, dass alle Buchstaben in der Datei ausgedruckt werden. Ich möchte nur, dass die Anzahl der Zeichen in den lateinischen Namen ausgedruckt wird.
Die Textdatei:
David Lee:Cephaloscyllium ventriosum
Max Steel:Galeocerdo cuvier
Jimmy Park:Sphyrna mokarren
Was Sie falsch machen, ist, dass Sie alle Namen zählen, obwohl Sie sie tokenisieren . Mit dieser Methode können Sie Buchstaben eines beliebigen Strings oder Satzes zählen.
public static int countLetter(String name) {
int count = 0;
if(name != null && !name.isEmpty()) {
/* This regular expression is splitting String at the
* sequence of Non-alphabetic characters. Hence actually
* splitting the Name into group of words */
String[] tokens = name.split("[^a-zA-Z]+");
for(String token : tokens) {
count += token.length();
}
}
return count;
}
Und ersetzen Sie diese Leitungen
/* Note: here you are iterating all your Names from each line */
for (String s: tokenSize) {
// Updating the numberOfLetters
numberOfLetters += s.length();
}
mit diesem
numberOfLetters += countLetter(latinName);
Macht das Sinn ? Ich hoffe du hast dein Problem gefunden.
Wichtiger Hinweis: Sie können mit dieser Regex experimentieren hier
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen