2012-11-25 45 views
0

我有以下字符串String.endsWith()不工作

http://store.aqa.org.uk/qual/newgcse/pdf/AQA-4695-W-SP.PDF 

我想它,所以如果用戶忘記輸入http://或將.PDF,程序會自動更正。所以,我想這個代碼

if (!str.startsWith("http://")) { // correct forgetting to add 'http://' 
     str = "http://" + str; 
    } 
    System.out.println(str); 
    if (!str.endsWith("\\Q.PDF\\E")) { 
     str = str + "\\Q.pdf\\E"; 
    } 

然而,即使當我輸入正確的字符串,http://store.aqa.org.uk/qual/newgcse/pdf/AQA-4695-W-SP.PDF 輸出是這樣的。

http://store.aqa.org.uk/qual/newgcse/pdf/AQA-4695-W-SP.PDF\Q.pdf\E 

爲什麼?爲什麼另一個'.PDF'被添加?

+0

你不明白爲什麼你認爲'endsWith'不工作。爲什麼你會期望它在這種情況下返回'true'? –

回答

16

因爲http://store.aqa.org.uk/qual/newgcse/pdf/AQA-4695-W-SP.PDF最後沒有\Q.PDF\E。在字符串文字中,\\給你一個反斜槓。所以"\\Q.PDF\\E"\Q.PDF\E   —反斜槓,後面跟着一個Q,後面是一個點,然後是PDF,後面是另一個反斜槓,後面跟着E

如果你想看看字符串以.PDF結束,只需使用

if (!str.endsWith(".PDF")) 

當然,這是區分大小寫的。如果你希望它是區分大小寫的,大概是:

if (!str.toLowerCase().endsWith(".pdf")) 
+0

但它有.PDF這是我正在測試? – NightStrider

+3

@NightStrider:不,你沒有測試「.PDF」 - 你正在測試反斜槓Q dot PDF反斜槓E.代碼的行爲完全如我所料 - 不清楚的是你爲什麼會這樣做期望它表現任何其他方式。 –

+0

我在看這個:http://stackoverflow.com/questions/7904695/java-escaping-meta-characters-and-in-regex – NightStrider

0

- 如果你關心的是.PDF匹配 -它僅僅是因爲你的字符串http://store.aqa.org.uk/qual/newgcse/pdf/AQA-4695-W-SP.PDF亙古不變的\Q.PDF\E

結束,然後做這個...

if (s.endsWith(".PDF")){ 

    // add it at the end.... 

} 

-在這裏使用StringBuilder而不是String,這可能是可變

3

Hy。我認爲這是你想要的:

String str = "http://store.aqa.org.uk/qual/newgcse/pdf/AQA-4695-W-SP"; 
    //String str = "http://store.aqa.org.uk/qual/newgcse/pdf/AQA-4695-W-SP.PDF"; 
    if (!str.startsWith("http://")) { // correct forgetting to add 'http://' 
     str = "http://" + str; 
    } 
    System.out.println(str); 
    if (!str.endsWith(".PDF")) { 
     str = str + ".PDF"; 
    } 
    System.out.println(str); 
}