2011-05-24 148 views
2

这里是输入我的功能为什么java String中的“contains”方法返回找不到?

"<div class=\"xbox\">TESTING<span class=\"newbox\"><a href=\"javascript:void(0);\" id=\"btnbox\">Use a new box</a></span></div><div class=\"cardnumber\">***-1111</div></div>" 

当我做在它下面永远不会返回任何东西,但-1

input.indexOf("cardnumber") 

这是不工作的原因吗?当我做一个的indexOf(“格”),它返回正常...(帮助)

感谢球员(对不起,不张贴早些时候单元测试)

public Cart viewCart() { 
     ResponseAndCookies result = service.makeHttpRequestWithUrl("https://www.xbox.com/account/fakebox/"); 
     String response = result.getResponse(); 

     String availableCreditCard = "<div class=\"cardnumber\">***"; 
     if (response.contains(availableCreditCard)) { 
      return parseJson.parseCartAndReturnObject(response); 
     } 

     return null; 
    } 

    public class XboxViewCartServiceTest { 
    @Test 
    public void verify_cart_works_with_valid_login() { 
     FakeXboxCartParseJson jsonParser = new FakeXboxCartParseJson(); 
     XboxViewCartService sut = new XboxViewCartService(new FakeXboxViewCartHttpBase(), jsonParser); 
     Cart cart = sut.viewCart(null); 

     Assert.assertTrue(jsonParser.calledMethod); 
    } 

    class FakeXboxViewCartHttpBase extends XboxHttpService { 
     @Override 
     public ResponseAndCookies doHttpPostWithUrl(String url, ResponseAndCookies responseAndCookies, String json) { 
      ResponseAndCookies result = new ResponseAndCookies(); 
      result.setResponse("<div class=\"xbox\">TESTING<span class=\"newbox\"><a href=\"javascript:void(0);\" id=\"btnbox\">Use a new box</a></span></div><div class=\"cardnumber\">***-1111</div></div>"); 

      return result; 
     } 
    } 

    class FakeXboxCartParseJson extends XboxCartParseJson { 
     public boolean calledMethod = false; 
     @Override 
     public Cart parseCartAndReturnObject(String html) { 
      calledMethod = true; 
      return null; 
     } 
    } 
} 
+2

字符串中是否有非打印字符?在我看来,没有理由在该输入字符串中找不到'cardnumber'。 – 2011-05-24 01:05:28

+1

我们可以看看剩下的代码吗? – Ryan 2011-05-24 01:07:03

+4

似乎为我工作。 http://ideone.com/voTHj – 2011-05-24 01:07:45

回答

3

显然,这可以作为你提供给它,所以只有3个选项:

  1. 字符串中有一些不可打印的字符;
  2. 当您读取输入并进行比较时存在编码问题;
  3. 其他地方有什么问题,我们无法看到,因为您没有提供足够的代码。

就目前而言,最好的最好的是第3项

请提供更多的代码。

EDIT(2011-05-23 02:20):

感谢您的更新您的问题。所以,现在我们仍然不能确定,因为我们错过了端点返回的数据,但是如果没有完全包含<div class="cardnumber">***,这是一个很好的机会。

还要确保您为请求指定了正确的标头,并且使用了有效的内容类型和字符编码。请确保您的源文件没有使用奇怪的编码,因为您可能会在不知道它的情况下输入非标准的*字符。

+0

原来在我的部分单元测试中执行失败(覆盖是在错误的方法) - 感谢您抽出时间帮助这个颠簸的开发! – 2011-05-24 01:29:38

+0

@Toran:不客气。适合每个人,这就是为什么它是好的,我们都是在这里的怀疑论者:) – haylem 2011-05-24 01:29:48

+0

阿门!再次感谢! (我们可以通过任何机会将此举标记为删除,但是保留您的代表赚钱?) - 我只问问,因为这个问题并没有真正为其他人增值:( – 2011-05-24 01:32:54