Краткие условия, Java - PullRequest
       11

Краткие условия, Java

3 голосов
/ 28 октября 2010

Я хочу проверить, не является ли текущий символ текущий не ',', '-', '.'или '' Есть ли более короткое выражение для:

if((current != ' ') || (current != '.') || ...)

каких-либо идей?

РЕДАКТИРОВАТЬ:

Мне просто разрешено использовать методы nextChar и getChar,Я должен пройти через символы.

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class WoerterZaehlen {
    public static void main(String[] args) {
        int wordCount = 0;
        /* Ab hier dürft ihr eigenen Code einfügen */
        char previous = ' ';
        while(hasNextChar()){
            char current = getChar();
            if(current != )
            //if(((current == ' ') || (current == '.') || (current == ',')) && ((previous != ' ') && (previous != ','))){
            //  wordCount++;
            //}
            previous = current;         
        }
        /* Ab hier dürft ihr nichts mehr ändern. */
        System.out.println("Anzahl der Wörter: " + wordCount);
    }

    private static InputStreamReader reader;
    private static int next = -1;

    public static boolean hasNextChar() {
        if(next != -1)
            return true;
        try {
            if(reader == null)
                reader = new InputStreamReader(new FileInputStream("textdatei.txt"));
            next = reader.read();

        } catch (IOException e) {
            System.out.println("Datei wurde nicht gefunden.");
        }
        return next != -1;
    }

    public static char getChar() {
        char c = (char) next;
        next = -1;
        return c;
    }
}

Ответы [ 6 ]

13 голосов
/ 28 октября 2010

Попробуйте

String prohibitedChars = ",-. ";
boolean isProhibited = prohibitedChars.indexOf('-') > -1;

Я почистил его, чтобы он выглядел немного привлекательно, но если вы действительно после short , тогда все, что вам нужно, это:

",-. ".indexOf('-') > -1;

EDIT:

Вы все еще можете использовать этот подход, даже если вы ограничены getChar () и hasNextChar ()

while(hasNextChar()){
    char current = getChar();
    if (",-. ".indexOf(current) > -1) {
        wordCount++;
    }
    previous = current;         
}
4 голосов
/ 28 октября 2010
    BitSet unwantedChars=new BitSet();
    unwantedChars.set('.');
    unwantedChars.set(',');
    unwantedChars.set('-');
    unwantedChars.set(' ');
    char current=',';
    if(unwantedChars.get(current)) //true if unwanted char else false
    {
     //....
    }

Использование Google Guava:

    CharMatcher unwantedChars=CharMatcher.anyOf("-,. ").precomputed();
    unwantedChars.apply(',');//true if unwanted char else false
2 голосов
/ 28 октября 2010

, если вам не разрешено использовать String.indexOf как в:

    if (" .,".indexOf(ch) != -1) {
        /* do something */
    } else {
        /* do if none of the above */
    }

используйте переключатель как в

    switch (ch) {
        case ' ': case '.': case ',': /* do something */ break;
        default: /* do if none of the above */ break;
    }

(вместо сохранения предыдущего символа можно просто использовать логическое значение, чтобы указать, был ли предыдущий символ границей слова или символом допустимого слова)

2 голосов
/ 28 октября 2010

Если вы перебираете всю строку, вы можете рассмотреть возможность использования регулярных выражений.

Пример проверки с помощью регулярного выражения: Проверка строки на недопустимые символы с использованием регулярного выражения

Примером является белый список, а не черный список. В большинстве случаев это будет предпочтительным вариантом, поскольку допустимых диапазонов символов гораздо больше, чем нелегальных.

0 голосов
/ 07 июня 2012

, поскольку многие предоставляют другие решения, я предоставлю то, которое вы будете использовать без ограничений.

String prohibitedChars = ",-. ";
prohibitedChars.contains(char);
0 голосов
/ 28 октября 2010

или, если вы хотите быть смешным, поместите символы в статический BitSet и используйте isSet (current).

Если этот код не будет выполняться миллионы раз, я буду придерживаться того, что у вас есть, поскольку ясность кода важнее неизмеримого прироста производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...