我尝试获取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/