2013-11-25 2 views
1

Я пытаюсь сделать детектор ubbi dubbi в java. В настоящее время я пытаюсь подсчитать количество ub в строке и добавить их к счетчику, а затем, если есть определенное число под введенным мной int, то это не ubbi dubbi, но если оно равно или выше то это ubbi dubbi. Нам не разрешено использовать регулярное выражение, строковый конструктор или массивы.Создание dubbi-детектора ubbi в java

Вот что я в настоящее время:

public static boolean detect(String phrase) { 
    boolean isUbbi = false; 
    int count = 0; 
    CharSequence ub = "ub"; 

    if (phrase.contains(ub)) { 
     count++; 
    } 
    if (count >= 2) { 
     isUbbi = true; 
    } else { 
     isUbbi = false; 
    } 
    return isUbbi; 
} 
+0

И ваш вопрос в том, что именно? – MichaelMilom

+0

Почему, когда я запускаю это, я не прав, когда у меня есть предложение ubbi dubbi в детекторе? – itsaferbie

+1

Что ж, что мешает вам делать цикл for и проверять строку на наличие ub? – Matthias

ответ

1

В вашем случае это условие никогда не встречал, чтобы стать true.

Поскольку

if (phrase.contains(ub)) { 
     count++; 
    } 

И условие не

if (count >= 2) { // never met. Always false. 

Это будет проверять появление один раз, а затем done.little требуется более реализации, чтобы проверить нет вхождений, который включает в себя loop и sub-string и т.д. ..

Если вы можете использовать Apache commons library

использование

int count = StringUtils.countMatches(phrase, "ub"); 

Если нет библиотек,

 String mainString = "ububsdfub"; 
     Pattern pat = Pattern.compile("ub"); 
     Matcher matcher = pat.matcher(mainString); 
     int count = 0; 
     while (matcher.find()) { 
      count += 1; 
     } 
     System.out.println(count); // prints 3 since 3 ub's are there. 

С основной операции разделения (внутренне использует регулярное выражение)

 String mainString = "ububsdfUb"; 
     String occurance = "ub"; 
     System.out.println(mainString.split(occurance, -1).length-1); 

Даже раскол не позволил

 String mainString = "ububsdfub"; 
     String occurance = "ub"; 
     int index=0; 
     int count=0; 
     while ((index = mainString.indexOf(occurance, index)) != -1) { 
      count++; 
      index += occurance.length() - 1; 
     } 
     System.out.println(count); 
+0

Мы можем использовать только то, что уже есть в java-библиотеке. – itsaferbie

+0

Нам также не разрешено использовать регулярное выражение. – itsaferbie

+0

@itsaferbie Thanksgod :) Есть еще одна возможность, Обновлено. –

-1

Вот что я придумал, просто добавил цикл for и все работает.

public static boolean detect(String phrase) { 
    boolean isUbbi = false; 
    int count = 0; 
    CharSequence ub = "ub"; 

    for(int i = 0; i < phrase.length(); i++) { 
     if (phrase.contains(ub)) { 
      count++; 
     } 
     if (count >= 2) { 
      isUbbi = true; 
     } else { 
      isUbbi = false; 
     } 
    } 
    return isUbbi; 
} 
+1

Почему вы думаете, что 'phrase.contains (ub)' когда-нибудь возвратит что-то другое при вызове его несколько раз? То, что вы делаете, равно: 'if (phrase.contains (ub)) count = phrase.length(); else count = 0; ' – Holger

0

Вы можете рассчитывать количество случаев, используя String.indexOf(…).

int count=0; 
for(int pos=phrase.indexOf(ub); pos>0; pos=phrase.indexOf(ub, pos)+1) count++; 
// now count contains the numbers of occurrences of ub in phrase