java - 解码路径 URL 代码后就停止了,或者看起来是这样

标签 java path

我尝试获取path到我的类(class)所在的目录。效果很好。但我想像这样编辑这条路径。示例:

走这条路:
/C:/User/Folder1/bin/

我想将上面的路径更改为:
C:\\User\\Folder1\\bin\\

现在,我编写了这段代码来完成此任务:

path = StartUp.class.getProtectionDomain().getCodeSource().getLocation().getPath();
decodedPath = URLDecoder.decode(path, "UTF-8");
System.out.println(path);
System.out.println(decodedPath);

pathArray = decodedPath.split("/");

pathLength = pathArray.length;
int x = 1;
while(x <= pathLength){
    goodPath = goodPath + pathArray[x] + "\\";
    x++;
}

System.out.println("goodPath " + goodPath);
System.out.println(decodedPath);

我认为这可以完成它,但我得到的所有输出是:

/C:/User/Folder1/bin/
/C:/User/Folder1/bin/
5

由于某种原因,它显示 pathArray 中的元素数量并跳过最后两个 System.out.println()的。

有人知道这是怎么回事吗?

最佳答案

这是因为数组越界异常。

改变

while(x <= pathLength){

while(x < pathLength){

在 Java 数组中,索引从零开始,因此如果数组的长度为 L,则数组中的最后一项的索引为 L-1。因此,在您的情况下,您必须循环直到 x 严格小于 pathLength (数组的长度),而不是小于或等于它。否则,在最后一次迭代中,变量x采用pathLength的值,并且您将访问数组边界的内存位置。

一个附加注释是,您以 x=1 开始循环,在本例中这是正确的,因为您的原始字符串以字符 / 开头,然后split 函数创建一个数组,其中第一项(索引零)是空字符串,因此从索引一开始跳过它是正确的。

无论如何,我建议你也看看正则表达式,或者在 String 类的 replace 方法中更容易。

关于java - 解码路径 URL 代码后就停止了,或者看起来是这样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23956108/

相关文章:

java - 选择枚举类型时好的方法设计?

java - Android Json/Gson问题

cocoa - 如何砍掉文件://from NSURL

hadoop - 获取hadoop Reducer中的Total输入路径

python - 递归搜索 python 脚本

java - 避免在使用层次结构参数的操作中进行静态绑定(bind)

java - 我如何将多行作为一个段落来阅读

java - 当我在 ubuntu 14.04 上运行 android studio 时,我得到了这个

c - 在 Linux 上正则化 C 中不存在的路径

bash - 通过 bash 别名修改 $PATH 变量