String.endsWith()不起作用

Nig*_*der 0 java string ends-with

我有以下字符串

http://store.aqa.org.uk/qual/newgcse/pdf/AQA-4695-W-SP.PDF
Run Code Online (Sandbox Code Playgroud)

我想要它,所以如果用户忘记输入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";
    }
Run Code Online (Sandbox Code Playgroud)

但是,即使我输入正确的字符串,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
Run Code Online (Sandbox Code Playgroud)

为什么?为什么要添加另一个 '.PDF'?

T.J*_*der 15

因为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"))
Run Code Online (Sandbox Code Playgroud)

当然,那是区分大小写的.如果您希望它不区分大小写,可能:

if (!str.toLowerCase().endsWith(".pdf"))
Run Code Online (Sandbox Code Playgroud)

  • @NightStrider:不,你没有测试".PDF" - 你正在测试反斜杠Q dot PDF反斜杠E.代码的行为完全符合我的预期 - 不清楚的是为什么你期望它表现出任何其他方式. (3认同)