2013-08-14 3 views
0

Я написал метод проверки строки заглавными буквами, и если он найдет один счетчик int, увеличен на 1. Но когда я тестирую метод im, которому говорят, что деление на 0 не допускается , Он не должен быть 0 .. может ли кто-нибудь пролить свет на это?Поиск и подсчет заглавных букв

public final boolean findIfCaps(String msg) 
    { 
     int count=0; 
     msg = msg.replaceAll("\\W",""); 
     for(int x=0;x<msg.length();x++){ 
      if(Character.isUpperCase(msg.charAt(x))) 
       count++; 
     } 
     double percent = count/msg.length(); 
     if(percent>0.5) 
      return true; 
     return false; 
    } 
+0

Какое сообщение вы тестирование это на? Кроме того, если вы перейдете к отладчику, что означает 'msg' после вызова функции replaceAll()'? – Michelle

+1

Что вы переходите в 'findIfCaps', когда возникает ошибка? Если он сделан только из символов, отличных от слов, 'msg = msg.replaceAll (" \\ W "," ")' превратит 'msg' в пустую строку, длина которой равна 0. – andersschuller

+0

Вам это не нужно 'replaceAll' для вашей задачи. – Maroun

ответ

5

Вам нужна явная проверка, если msg.length() > 0. Это может быть пустая строка, которая приведет к исключению.

(Вы также можете опустить replaceAll(..) часть, это не поможет вам найти количество заглавных букв)

+0

Либо это, либо вы должны исправить любую ошибку, из-за которой 'msg' будет иметь длину 0 –

+0

, это может быть пустое сообщение - нужно где-то проверить – Bozho

+0

' это может быть пустое сообщение 'Это звучит как предположение. Если 'msg' не имеет никакого бизнеса, то пустое, а пустое сообщение - это состояние ошибки, и в этом случае вы действительно хотите выбросить исключение. –