625 Stimmen

Wie kann ich die Anzahl der Vorkommen eines Zeichens in einer Zeichenkette zählen?

Ich habe die Zeichenfolge

a.b.c.d

Ich möchte die Vorkommen von '.' in einer idiomatischen Weise zählen, vorzugsweise in einem Einzeiler.

(Zuvor hatte ich diese Bedingung als "ohne Schleife" ausgedrückt, falls Sie sich fragen, warum alle versuchen, ohne Schleife zu antworten).

1 Stimmen

Hausaufgaben? Denn sonst sehe ich nicht die Notwendigkeit, die Schleife zu vermeiden.

26 Stimmen

Ich bin einer Schleife nicht abgeneigt, sondern suche eher nach einem idiomatischen Einzeiler.

2 Stimmen

Schleifen wurden für ein Problem wie dieses geschaffen. Schreiben Sie die Schleife in eine gewöhnliche Utility-Klasse und rufen Sie dann Ihren frisch geprägten One-Liner auf.

184voto

Jon Skeet Punkte 1325502

Früher oder später, etwas muss eine Schleife bilden. Es ist viel einfacher für Sie, die (sehr einfache) Schleife zu schreiben, als etwas zu verwenden wie split die viel leistungsfähiger ist, als Sie brauchen.

Kapseln Sie die Schleife auf jeden Fall in einer eigenen Methode, z. B.

public static int countOccurrences(String haystack, char needle)
{
    int count = 0;
    for (int i=0; i < haystack.length(); i++)
    {
        if (haystack.charAt(i) == needle)
        {
             count++;
        }
    }
    return count;
}

Dann brauchen Sie die Schleife nicht in Ihrem Hauptcode zu haben - aber irgendwo muss die Schleife ja sein.

6 Stimmen

For (int i=0,l=haystack.length(); i < l; i++) sei nett zu deinem Stack

12 Stimmen

(Ich bin mir nicht einmal sicher, woher der Teil "Stapel" des Kommentars kommt. Es ist nicht wie diese Antwort ist meine rekursive, die in der Tat für den Stapel unangenehm ist).

3 Stimmen

Nicht nur das, sondern dies ist möglicherweise eine Anti-Optimierung, ohne einen Blick darauf zu werfen, was das Jit tut. Wenn Sie die oben genannten auf ein Array für Schleife zum Beispiel getan haben, könnten Sie die Dinge schlechter machen.

36voto

fubo Punkte 42146
String s = "a.b.c.d";
long result = s.chars().filter(ch -> ch == '.').count();

1 Stimmen

Stimmen Sie mit + für eine native Lösung.

4voto

Hardest Punkte 327
public static int countOccurrences(String container, String content){
    int lastIndex, currIndex = 0, occurrences = 0;
    while(true) {
        lastIndex = container.indexOf(content, currIndex);
        if(lastIndex == -1) {
            break;
        }
        currIndex = lastIndex + content.length();
        occurrences++;
    }
    return occurrences;
}

3voto

kassim Punkte 39
import java.util.Scanner;

class apples {

    public static void main(String args[]) {    
        Scanner bucky = new Scanner(System.in);
        String hello = bucky.nextLine();
        int charCount = hello.length() - hello.replaceAll("e", "").length();
        System.out.println(charCount);
    }
}//      COUNTS NUMBER OF "e" CHAR´s within any string input

2voto

Shaban Punkte 113
int count = (line.length() - line.replace("str", "").length())/"str".length();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X