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?
3 ответа
Так как 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"))
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);
}
- Это просто потому, что ваша строка http://store.aqa.org.uk/qual/newgcse/pdf/AQA-4695-W-SP.PDF
не заканчивается \Q.PDF\E
- Если вы заинтересованы в сопоставлении.PDF, то сделайте это...
if (s.endsWith(".PDF")){
// add it at the end....
}
- было бы более целесообразно использовать StringBuilder
здесь вместо String
, который изменчив.