Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中使用\(反斜杠)的子字符串_Java_String_Exception - Fatal编程技术网

在java中使用\(反斜杠)的子字符串

在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

我想从文件的完整路径中获取文件名。 输入:“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.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),因此


    返回-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("\\")