2016-05-19 2 views
2

Чтение аннотации на вершине теста Java TestNG и я аннотация, как:Java подрезать характер и пробельные

@TestInfo(id={ " C26603", " C10047" }) 

где TestInfo только интерфейс, который имеет id() as String array:

public String[] id() default {}; 

и C26603 и C10047 - это только те тесты, которые я назначаю.

Вот как тестовая структура выглядит как (например):

Случай 1:

@TestInfo(id={ " C26603", " C10047" }) 
public void testDoSomething() { 
    Assert.assertTrue(false); 
} 

Аналогичен более чистый случай будет:

Случай 2:

@TestInfo(id={ "C26603", "C10047" }) 

Как вы можете видеть, этот случай 2 более ясный, чем случай 1. Этот случай 2 не имеет пробелов в тестовых идентификаторах.

Как извлечь эти идентификаторы и убедиться, что они не имеют этого символа C в начале и просто в чистом номере? Например, мне нужен 26603 для моего первого id и 10047 для второго. В массиве id есть несколько пробелов (внутри кавычек). Я хочу обрезать все это (например, белые пробелы) и просто получить идентификатор. В настоящее время я применяю for loop для обработки каждого идентификатора, и как только я получу чистый номер, я хочу обратиться к стороннему API-интерфейсу (API ожидает чистого номера в качестве ввода и поэтому важно удалить C как начальный символ и другие пробелы).

Вот что я пробовал:

TestInfo annotation = method.getAnnotation(TestInfo.class); 
if(annotation!=null) { 
     for(String test_id: annotation.id()) { 
      //check if id is null or empty 
      if (test_id !=null && !test_id.isEmpty()) { 
     //remove white spaces and check if id = "C1234" or id = "1234" 
        if(Character.isLetter(test_id.trim().charAt(0))) { 
           test_id = test_id.substring(1); 
        } 
        System.out.println(test_id); 
        System.out.println(test_id.trim()); 
      } 
     } 
} 

Приведенный выше код дает мне C26603 и not 26603 для случая 1. Он работает для случая 2.

ПРИМЕР 3:

@TestInfo(id={ " 26603", " 10047" }) 

Для этого случая нет C как начального символа acter идентификатора теста, поэтому функция должна быть достаточно умной, чтобы просто обрезать пробелы и идти вперед.

+0

Я взял беглый взгляд через ваш профиль, и так как вы довольно новый пользователь, вы могли бы посмотреть на [это] (http://stackoverflow.com/help/someone-answers)? У вас будет лучший опыт в SO, если вы вознаградите людей за то, что помогли вам. –

+0

Получил это, я буду помнить об этом. –

ответ

5

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

test_id = test_id.replaceAll("\\D", ""); 
+0

Имейте в виду, что вход 'a3c5e' приведет к' 35'. Если все в порядке, то это, безусловно, самое простое решение. – Andreas

+1

Я занимался инженерством, идеальным решением для меня. Кроме того, @Andreas я просто хочу цифры цифры, и это работает. –

+2

@PratikJaiswal Хорошо. Затем вы должны принять этот ответ, нажав галочку. Я просто прояснил эффект, поэтому вы можете выбрать этот вариант, широко открыв глаза. – Andreas

2

Я настоятельно рекомендую вам отлаживать метод. Вы узнаете много.

Если вы посмотрите на ваш if заявление здесь:

if(Character.isLetter(test_id.trim().charAt(0))) { 
    test_id = test_id.substring(1); 
} 

Когда test_id = "C1234", ваше условие истинно. Однако ваша проблема становится substring.

ANSWER: trim это!

test_id = test_id.trim().substring(1); 
+0

Это работает и для меня. Отлажен много и, конечно, многому научился. –