Ich habe eine Zeichenfolge, die wie folgt aussieht:

Here    is a test

Ich möchte die Anzahl der Leerzeichen (4) zwischen dem ersten und dem zweiten Wort nur zurückgeben, bin mir aber nicht ganz sicher, wie ich das machen soll. Für meinen aktuellen Versuch zählt es die Anzahl der Leerzeichen der gesamten Zeichenfolge, aber ich brauche es nur zwischen dem ersten und dem zweiten Wort und um dann anzuhalten:

int spaceCount = 0;
for (char c : line.toCharArray()) {
    if (c == ' ') {
         spaceCount++;
    }
}
0
ShaneOG97 19 Feb. 2020 im 22:41

4 Antworten

Beste Antwort

Hier ist eine Lösung mit regulären Ausdrücken

    String text = "Here    is a test";

    Pattern pattern = Pattern.compile("(?<=\\w)(\\s+)");

    Matcher matcher = pattern.matcher(text);
    if (matcher.find()) {
        System.out.println("number of whitespaces = " + matcher.group().length());

    }

Der reguläre Ausdruck sucht nach einem Wort (einer beliebigen, fortlaufenden Zahl von Nicht-Leerzeichen), gefolgt von Leerzeichen. Es spielt also keine Rolle, ob der Text mit Leerzeichen beginnt oder nicht. Die Leerzeichen werden von einer Gruppe erfasst und die Länge der gefundenen Gruppe wird zurückgegeben. Das Regexp-Muster kann vorkompiliert und der Code zum Abgleichen eines Textes in eine Methode eingefügt werden:

private static final Pattern pattern = Pattern.compile("(?<=\\w)(\\s+)");

public static void main(String[] args) {

  String text = "Here    is a test";

  System.out.println("countWhitespaces(text) = " + countWhitespaces(text));
}

private static int countWhitespaces(String text) {
    Matcher matcher = pattern.matcher(text);
    if (matcher.find()) {
        return matcher.group().length();
    }
    return 0;
}
2
Ralf Wagner 19 Feb. 2020 im 20:43

Sie möchten beim ersten Leerzeichen beginnen und bis zum letzten zählen.

int spaceCount = 0;
int i = line.indexOf(" "); // (You can replace this with a while loop to consider other whitespace characters)
while (line[i].equals(" ") && i < line.length) { // (Change criteria here if you want to consider other whitespace)
    i++;
    spaceCount++;
}

Wenn Leerzeichen mehr Zeichen als nur ein Leerzeichen enthalten, ersetzen Sie die Zeile indexOf durch eine while-Schleife, die zum ersten Leerzeichen iteriert, und ändern Sie die Kriterien der anderen while-Schleife so, dass sie " \n\t".contains(line[i]) enthält (Sie können alle Zeichen einschließen, in denen Sie Leerzeichen berücksichtigen diese Zeichenfolge).

3
keyhan 19 Feb. 2020 im 19:51
int spaceCount = 0;
for (char c : line.toCharArray()) {
    if (c == ' ') {
         spaceCount++;
    } else if ( spaceCount > 0 ) {
          break;
    }
}

Dies setzt voraus, dass es vor der ersten Welt keine Räume gibt.

1
FredK 19 Feb. 2020 im 19:49

Ich nehme deinen Code, bearbeite ihn einfach ein bisschen:

public int countSpace(String line) {
    int spaceCount = 0;
    int word = 0;
    boolean isSpace = false;
    for (char c : line.toCharArray()) {
        if (c == ' ') {
            ++spaceCount;
            isSpace = true;
            continue;
        }

        if (isSpace) {
            ++word;
            isSpace = false;
        }

        if (1 == word) {
            break;
        }
    }

    return spaceCount;
}

Es ist nicht die einfachste Lösung, und Sie sollten Leerzeichen kürzen, bevor Sie sie verwenden.

0
Lounis 19 Feb. 2020 im 19:58