将两个字符视为字符串中的一个

时间:2015-01-30 11:35:25

标签: java

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,而E是失败,在这种情况下= 4。

点是通行证而E是失败。无论什么时候运行并且出现故障,它都会添加一个&#39; E&#39;在点前面变成&#39; .E&#39;。我可以自己拿到E,但是我想要一个声明,说如果在E之前有一个点,那么它应该打印出来的。&E 39;并将其传递给名为failedTest的变量。

上面的代码有一个输出:4,11,14,16,这不是我想要的,因为它分别考虑每个角色,但我希望它考虑&#39; .E&#39;如果一个E出现在一个点之后,那么它应该将其视为一个。如果这应该考虑到&#39; .E&#39;因为失败,预期的输出应该是3,9,11,12。谢谢:)

2 个答案:

答案 0 :(得分:1)

我现在更了解你的问题:如果我是对的,你打印.,运行测试,如果没有通过,你将打印E

如果secondLine的最终长度是测试次数加上误差次数,那么如果第一个误差是测试Ti,则Ti点将位于位置Ti,其{{{ 1}}将位于(T-1)+ 1位置。以下测试将移位一个位置:测试点T-(i + 1)将位于(Ti)+ 2位置。明白这一点?

所以,这是我的建议

E

答案 1 :(得分:0)

您需要跟踪第二行中额外字符的数量,并从匹配位置中减去它们。还要将失败字符串更改为&#34;。&#34;

    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>";