StringBuilder 不正确地反转文件名
StringBuilder improperly reversing a filename
我有一个 StringBuilder 用于简单地反转和 return 一个字符串。有问题的字符串是一个文件名:"server_1.8.2_java_8.jar"(这会有所不同)。
当我反转字符串并 return 时,它变成 "sre_.._aa8jra._vj281rve"。我使用了这个的一些变体(以及像 "Reverse this string" 这样的常规句子),我得到了相同的结果。
但是,如果我在方法中直接分配字符串(而不是将其作为参数并对其执行 some operations),它似乎可以正常工作。
测试方法代码以防有帮助:
static String parseJarfileName(String jarLocation) {
if(jarLocation == null)
return ""; // path to jar location is empty,
// return so stuff doesn't get messed up
String jarfileName = ""; // name of the .jar server executable
for(int i = jarLocation.length(); jarLocation.charAt(i - 1) != '/'; i --) {
// read the string backwards until a / is found,
// signaling that the jarfile name has ended
// as this is done, concatenate the characters of the jarfile name
jarfileName += jarLocation.charAt(i - 1);
jarfileName.trim();
// the jarfile name will be backwards here, so reverse it
String str = new StringBuilder(jarfileName).reverse().toString();
jarfileName = str;
}
return jarfileName;
}
public static void main(String[] args) {
String filePath = "/Users/John/Desktop/server/server_1.8.2_java_8.jar";
String fileName = parseJarfileName(filePath);
System.out.println(fileName);
}
// written by 2xedo: twitter.com/2xedo
此代码将 "sre_.._aa8jra._vj281rve" 打印到控制台。
如果我没记错的话你正在寻找类似
的东西
public static String parseJarfileName(String jarLocation) {
if (jarLocation == null)
return "";
return jarLocation.substring(jarLocation.lastIndexOf('/')+1);
}
或者更具可读性
public static String parseJarfileName(String jarLocation) {
if (jarLocation == null)
return "";
return new File(jarLocation).getName();
}
您还可以使用 Path
,它是 File
的更新版本(在大多数情况下是首选)
return Paths.get(jarLocation).getFileName().toString();
您每次迭代都在反转文件名。
r
ra
arj
jra.
.arj8
//...
在 for
循环结束后移动 reverse()
代码。
} // end of for loop
// the jarfile name will be backwards here, so reverse it
String str = new StringBuilder(jarfileName).reverse().toString();
jarfileName = str;
return jarfileName;
}
此外,文件名中没有空格似乎无关紧要,但是
jarfileName.trim();
如果不将返回值分配给某物,则无用。使用
jarfileName = jarfileName.trim();
你可以删除这个:
String str = new StringBuilder(jarfileName).reverse().toString();
jarfileName = str;
一切似乎都很好。
如果您只想 return 文件名,为什么不直接 jarLocation.substring(jarLocation.lastIndexOf("/") + 1, jarLocation.length);
您可能需要做更多的工作来处理边缘情况等等,但这应该能准确地满足您的需求。
我有一个 StringBuilder 用于简单地反转和 return 一个字符串。有问题的字符串是一个文件名:"server_1.8.2_java_8.jar"(这会有所不同)。
当我反转字符串并 return 时,它变成 "sre_.._aa8jra._vj281rve"。我使用了这个的一些变体(以及像 "Reverse this string" 这样的常规句子),我得到了相同的结果。
但是,如果我在方法中直接分配字符串(而不是将其作为参数并对其执行 some operations),它似乎可以正常工作。
测试方法代码以防有帮助:
static String parseJarfileName(String jarLocation) {
if(jarLocation == null)
return ""; // path to jar location is empty,
// return so stuff doesn't get messed up
String jarfileName = ""; // name of the .jar server executable
for(int i = jarLocation.length(); jarLocation.charAt(i - 1) != '/'; i --) {
// read the string backwards until a / is found,
// signaling that the jarfile name has ended
// as this is done, concatenate the characters of the jarfile name
jarfileName += jarLocation.charAt(i - 1);
jarfileName.trim();
// the jarfile name will be backwards here, so reverse it
String str = new StringBuilder(jarfileName).reverse().toString();
jarfileName = str;
}
return jarfileName;
}
public static void main(String[] args) {
String filePath = "/Users/John/Desktop/server/server_1.8.2_java_8.jar";
String fileName = parseJarfileName(filePath);
System.out.println(fileName);
}
// written by 2xedo: twitter.com/2xedo
此代码将 "sre_.._aa8jra._vj281rve" 打印到控制台。
如果我没记错的话你正在寻找类似
的东西public static String parseJarfileName(String jarLocation) {
if (jarLocation == null)
return "";
return jarLocation.substring(jarLocation.lastIndexOf('/')+1);
}
或者更具可读性
public static String parseJarfileName(String jarLocation) {
if (jarLocation == null)
return "";
return new File(jarLocation).getName();
}
您还可以使用 Path
,它是 File
return Paths.get(jarLocation).getFileName().toString();
您每次迭代都在反转文件名。
r
ra
arj
jra.
.arj8
//...
在 for
循环结束后移动 reverse()
代码。
} // end of for loop
// the jarfile name will be backwards here, so reverse it
String str = new StringBuilder(jarfileName).reverse().toString();
jarfileName = str;
return jarfileName;
}
此外,文件名中没有空格似乎无关紧要,但是
jarfileName.trim();
如果不将返回值分配给某物,则无用。使用
jarfileName = jarfileName.trim();
你可以删除这个:
String str = new StringBuilder(jarfileName).reverse().toString();
jarfileName = str;
一切似乎都很好。
如果您只想 return 文件名,为什么不直接 jarLocation.substring(jarLocation.lastIndexOf("/") + 1, jarLocation.length);
您可能需要做更多的工作来处理边缘情况等等,但这应该能准确地满足您的需求。