在java中使用\(反斜杠)的子字符串
我想从文件的完整路径中获取文件名。 输入:“D://amol//1/\15\u amol.jpeg” 预期输出:15_amol.jpeg 我已经为此编写了以下代码在java中使用\(反斜杠)的子字符串,java,string,exception,Java,String,Exception,我想从文件的完整路径中获取文件名。 输入:“D://amol//1/\15\u amol.jpeg” 预期输出:15_amol.jpeg 我已经为此编写了以下代码 public class JavaApplication9 { public static void main(String[] args) { String fname="D://amol//1/\15_amol.jpeg"; System.out.println(fname.substrin
public class JavaApplication9 {
public static void main(String[] args) {
String fname="D://amol//1/\15_amol.jpeg";
System.out.println(fname.substring(fname.lastIndexOf("/")));
System.out.println(fname.substring(fname.lastIndexOf("\\")));
}
}
但低于产出:
_amol.jpeg
Exception in thread "main" java.lang.StringIndexOutOfBoundsException:
String index out of range: -1
at java.lang.String.substring(String.java:1927)
at javaapplication9.JavaApplication9.main(JavaApplication9.java:6)
C:\Users\lakhan.kamble\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53:
Java returned: 1
字符串
\15
是回车符(0x0d,13十进制)的“八进制转义”。这里有两种可能性
\15
作为八进制转义,在这种情况下,您正试图创建一个带有嵌入换行符的文件名。在这种情况下,fname
的实际内容可以表示为
"D://amol//1/" + "\n" + "_amol.jpeg";
Windows将阻止这种情况发生,并且您的程序将抛出一个IOException
String fname="D://amol//1/\\15_amol.jpeg";
在这种情况下,额外的反斜杠是多余的,Windows将忽略它,因为文件名(以Windows路径术语)将解析为D:\amol\1\\15\u amol.jpeg
,并且相邻的目录分隔符将折叠为单个分隔符。因此,您可以完全省略额外的反斜杠,而不更改有效路径返回-1,导致异常您需要在原始字符串文本中转义反斜杠。所以
String fname=“D://amol//1/\\15\u amol.jpeg”代码>。投票以键入错误结束此操作。File.getName()
将为您完成此操作(一旦您修复了键入错误);不要重新发明轮子System.out.println(新文件(“D://amol//1/\\15\u amol.jpeg”).getName()你的回答很有见地,因此我撤回了对这个问题的投票。这样的回答绝对值得。虽然如果我非常挑剔,我还是要指出嵌入式换行与嵌入式回车并不完全相同。谢谢,我还更新了答案以解决实际的直接问题:-)
fname.lastIndexOf("\\")