2015-01-30 2 views
-1
String secondLine = ...E......E..E.E;  
String failures = "E";  
String passed = "."; 

int i = 0; 
while ((i = (secondLine.indexOf(failures, i) + 1)) > 0) { 
    System.out.println(i); 
    feedbackString += "<strong style='color: red;'><li>Failed: </strong><strong>" + i + "</strong> - " + "out of " + resultString.length() + " tests.<br>"; 
} 

Общее количество испытаний является суммой точек, который является = 12. и Е являются сбои, которые в этом случае = 4.Учитывая два символа как один в строке

Точки являются проходами, а E - провалами. Всякий раз, когда это выполняется и происходит сбой, он добавляет «E» перед точкой, которая становится «.E». Я могу получить E по своему усмотрению, но я хочу, чтобы заявление, в котором говорилось, что точка находится перед E, а затем должна печатать «.E» и передавать ее в переменную с именем failedTest.

Вышеприведенный код имеет результат: 4, 11, 14, 16, который не является тем, что я хочу, поскольку он рассматривает каждый символ отдельно, но я хочу, чтобы он рассматривал «.E» как тот, который есть, если E приходит после точка, то она должна рассматривать его как единое целое. если это должно быть выполнено с учетом «.E» как сбоя, ожидаемый результат должен быть 3, 9, 11, 12. Спасибо :)

+0

если я понял правильно, вы ищете текст '.E'. В этом случае вы можете использовать 'secondLine.indexOf (". E ", i)' – Narkha

+0

Почему это * добавляет * E к точке, вместо * заменяет * это? – Tom

+0

Не можете изменить ваш вопрос? Трудно понять ваш вопрос. Я думаю, что secondLine.indexOf (". E", i) должен работать. –

ответ

0

Вам нужно отслеживать количество дополнительных символов во второй строке и вычесть их из позиции матча. Также изменить отказ строки в «.е»

String secondLine = "...E......E..E.E"; 
    String failures = ".E"; 
    String passed = "."; 
    int n = 0; 
    int i = 0; 
    while ((i = (secondLine.indexOf(failures, i) + 1)) > 0) { 
     System.out.println(i-n); 
     n++; 
     feedbackString += "<strong style='color: red;'><li>Failed: </strong><strong>" + (i-n) + "</strong> - " + "out of " + resultString.length() + " tests.<br>"; 
+0

Эй, мне было интересно, как вы могли бы добавить свой выход из этого кода как EEEE вместо 3,9,11 и 12? – Buzz

+0

Я не уверен, что вы имеете в виду. BTW Я думаю, что более простой подход - просто преобразовать строку в один символ для прохода и один символ для отказа. 'secondLine.replaceAll (" \\. E "," F "). replaceAll (" \\. "," P ")' даст вам простую строку '" PPFPPPPPFPFF "'. –

1

Я понимаю вашу проблему лучше: если я прав, вы печатаете ., побежал тест, и если он не пройдет, вы будете печатать E.

Точка, если конечная длина secondLine - это число испытаний плюс число ошибок, поэтому если первая ошибка является испытанием Ti, то точка Ti будет находиться в положении Ti, ее E будет находиться на (T-1) + 1. Следующий тест будет смещен в одну позицию: точка теста T- (i + 1) будет находиться в положении (Ti) + 2. Вы видите точку?

Итак, это мое предложение

String secondLine = "...E......E..E.E";  
String failures = "E";  
String passed = "."; 

int detectedErrors = 0; 
int i = 0; 
while ((i = (secondLine.indexOf(failures, i) + 1)) > 0) { 
    System.out.println(i); 
    feedbackString += "<strong style='color: red;'><li>Failed: </strong><strong>" 
        + (i - detectedErrors) // here 
        + "</strong> - " + "out of " + resultString.length() + " tests.<br>"; 
    detectedErrors += 1; // and here 
} 
+0

В настоящее время он печатает '.E', если тест завершился неудачно. – Tom

+1

Ну, в конце результат будет таким же '.', если тестовый проход и' .E', если это не так. Но, возможно, было бы более ясно напечатать только 'E' вместо' .E'. – Narkha

+0

Я знаю, я сказал ему, что уже: D. Мы увидим, возможно ли это сделать. – Tom

Смежные вопросы