Как напечатать строку в правильном формате - PullRequest
0 голосов
/ 17 января 2019

Я занимаюсь разработкой, управляемой тестами. Поэтому я создал кейс, который должен отправить массив строк в функцию. Эта функция проверит, есть ли в массиве какие-либо строчные буквы в верхнем регистре. Если он есть, ему нужно распечатать все Строки, такие как «имя, имя, имя и имя, удивительны». Поэтому перед последним следует поставить «и».

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

Контрольный пример

@Test
    void testAcceptsAJumbleOfUpperCaseAndLowerCase() {
            theAmazingPeter obj = new theAmazingPeter();             
            String[] arr = {"Peter","GUNEET"};
            String result = obj.AmazingPerson(arr);
            assertEquals("Peter, and GUNEET are amazing",result);
        }
    }

Заявление

else {
    for (int i = 0; i < names.length; i++) {
        if (names.length >= 1 && names[i].equals(names[i].toUpperCase())) {
            if (i > 0) {
                sb.append(", ");
                if (i == names.length - 1) {
                    sb.append("and ");
                }
            }
            sb.append(names[i]);
        }
        System.out.println(sb.toString() + " are amazing");
    }
    String result = sb.toString() + " are amazing";
    return result;
}

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Если необходимо проверить, содержит ли строка заглавную букву, ее необходимо реализовать следующим образом:

    StringBuffer sb = new StringBuffer();
    char ch;

    for (int i = 0; i < names.length; i++) {
        if (Character.isUpperCase(names[i].charAt(0))) {
            if (i == names.length - 1) {
                sb.append(" and " + names[i]);
            } else if (i == names.length - 2) {
                sb.append(names[i]);
            } else {
                sb.append(names[i] + ", ");
            }
        }
    }
    System.out.println(sb.toString() + " are amazing");
    String result = sb.toString() + " are amazing";
    return result;
0 голосов
/ 18 января 2019

Эта строка в вашем коде неверна:

if(names.length >= 1 && names[i].equals(names[i].toUpperCase()))

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

Например: если names[i] содержит "Peter", то names[i].toUpperCase() равно "PETER", и выражение вернет false. Но вы хотите принять эту строку, потому что она содержит заглавную букву.

Вместо этого вы можете использовать Character.isUpperCase(char) метод.

public boolean containsUpper(String s){
      for (int i = 0 ; i< s.length(); i++){
          if(Character.isUpperCase(s.charAt(i)))
             return true; 
      }
      return false;
}

Вы можете вызвать эту функцию для каждой строки, а затем продолжить.

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