2016-02-08 6 views
5

Jestem nowicjuszem w Javie i obecnie piszę program, który pobiera argumenty używane dla ograniczników pliku tekstowego zawierającego zdania, a następnie określa liczbę zdań w tym pliku tekstowym na podstawie dostarczonych ograniczników.Java - Jeśli słowo kończy się ogranicznikami wprowadzonymi przez użytkownika, to wykonaj: x

Kiedy prowadzę Main.java chcę użytkownika, aby być w stanie wykonać następujące czynności (gdzie d jest flaga do separatora i znaki następujące są ograniczniki):

java Main -d!?. lub java Main -d.?

Lub dowolna inna kombinacja. Moje pytania są następujące:

  1. Czy najlepiej przechowywać ograniczniki jako ciąg lub tablicę?
  2. Jak mogę jasno powiedzieć mojemu programowi, że używa się ograniczników? Obecnie mój program wykonuje następujące czynności:

Sprawdza, czy słowo nie kończy się żadnym z określonych ograniczników. Jak:

if (word.endsWith(".") || word.endsWith("!") || word.endsWith("?")) { 
      sentenceCount++ 
} 

Ale zamiast tego chciałbym go mieć coś takiego:

if (word.endsWith(delimitersStringorArray.contains()) { 
      sentenceCount++ 
    } 

Mam nadzieję, że to ma sens i mogę zapewnić żadnych dalszych wyjaśnień, jeśli to konieczne. Próbowałem wyszukiwać, ale nie znalazłem konkretnego pytania.

Dzięki!

Odpowiedz

4

Prawdopodobnie najlepiej jest mieć jak ogranicznik tablicy String. To dlatego, że metoda endsWith używa parametru String.

Problemem jest to, że rzeczywista wersja endswith w klasie java.lang.String nie akceptuje tablicę możliwych ogranicznikami, ale jest możliwe, aby utworzyć niestandardowy kod, aby zrobić to samo jak następuje:

public class StringUtility { 
    public static boolean endsWith(String str, String[] delimiters) { 
     for (String delimiter : delimiters) { 
      if (str.endsWith(delimiter)) { 
       return true; 
      } 
     } 
     return false; 
    } 
} 

i wezwać go użyć kodu jak poniżej

String[] delimiters = { ".", "!", "?" }; 
if (StringUtility.endsWith("yourWord", delimiters)) { 
    // Do something 
} 

pamiętać, że jest bardziej ogólny kod następnie co prosiłeś, ponieważ można sprawdzić, czy przekazany ciąg kończy się z ogranicznikami z więcej niż jednej postaci.

+0

Cleaner niż inne sugerowane kody +1 – Michael

+0

Tak czysty kod jest zawsze koniecznością. Lepiej czytać lepiej zrozumieć, lepiej przetestować, łatwiej ewoluować. –

+0

To jest świetne. Dzięki wielkie chłopaki! – Bryce

3

Jeśli ogranicznik jest długa tylko jedna postać, można przechowywać ograniczniki w List, a następnie sprawdzić, czy ostatni znak String jest na tej liście:

List<Character> delimiters = new ArrayList<Character>(); 
delimiters.add('.'); 
delimiters.add('!'); 
delimiters.add('?'); 

if(delimiters.contains(word.charAt(word.length() - 1))){ 

    sentenceCount++; 
} 
Powiązane problemy