Java 如何比较字符串数组?
我有这个代码示例。我想与包含路径的字符串进行比较。问题是在其他部分…在这个例子中,它们有/和usr在一起..我想比较它们不同点后的长度..谢谢你的帮助Java 如何比较字符串数组?,java,arrays,Java,Arrays,我有这个代码示例。我想与包含路径的字符串进行比较。问题是在其他部分…在这个例子中,它们有/和usr在一起..我想比较它们不同点后的长度..谢谢你的帮助 String path1 = "/usr/libexec/warmd"; String path2 = "/usr/lib/libOpen/xy"; String[] test1 = path1.split("/"); String[] test2 = path2.split("/"); ArrayList<String[]> p
String path1 = "/usr/libexec/warmd";
String path2 = "/usr/lib/libOpen/xy";
String[] test1 = path1.split("/");
String[] test2 = path2.split("/");
ArrayList<String[]> path1array = new ArrayList<String[]>();
ArrayList<String[]> path2array = new ArrayList<String[]>();
path1array.add(test1);
path2array.add(test2);
int len1 = test1.length;
int len2 = test2.length;
int len;
if (len1 <= len2) {
len = len1;
} else
len = len2;
for (int i = 0; i < len; i++) {
if ((test1[i]).equals(test2[i])) {
continue;
} else
break;
}
String path1=“/usr/libexec/warmd”;
字符串路径2=“/usr/lib/libOpen/xy”;
字符串[]test1=path1.split(“/”);
字符串[]test2=path2.split(“/”);
ArrayList path1array=新的ArrayList();
ArrayList path2array=新的ArrayList();
path1array.add(test1);
path2array.add(test2);
int len1=test1.length;
int len2=test2.length;
内伦;
如果(len1用于纯String
操作,而忘记了File
对象,则可以使用replaceFirst
或substring
和indexOf
的组合来删除路径Strings
中的“/usr/”
下面是一个例子:
// the input paths
String path1 = "/usr/libexec/warmd";
String path2 = "/usr/lib/libOpen/xy";
// gets "/usr/" in path1 and initializes a portion of path1 starting after
// the length of "/usr/"
String comparablePath1 = path1.substring(path1.indexOf("/usr/") + "/usr/".length());
// replaces the first instance of literal (in this case) pattern "/usr/" in path1
String trimmedPath1 = path1.replaceFirst("/usr/", "");
System.out.println(comparablePath1);
System.out.println(trimmedPath1);
String comparablePath2 = path2.substring(path1.indexOf("/usr/") + "/usr/".length());
String trimmedPath2 = path2.replaceFirst("/usr/", "");
System.out.println(comparablePath2);
System.out.println(trimmedPath2);
// compares "comparable" paths
if (comparablePath1.length() > comparablePath2.length()) {
System.out.println("1st path is longer");
}
else if (comparablePath2.length() > comparablePath1.length()) {
System.out.println("2nd path is longer");
}
else {
System.out.println("1st and 2nd paths are equal in length");
}
输出:
libexec/warmd
libexec/warmd
lib/libOpen/xy
lib/libOpen/xy
2nd path is longer
您可以按如下方式找到公共前缀子字符串:
int minLen = Math.min(test1.length, test2.length);
String commonPrefix = "";
for (int i = 0; i < minLen; i++) {
if (test1[i].compareTo(test2[i]) == 0) {
commonPrefix += test1[i]+"/";
} else {
break;
}
}
如果这些只是路径,您可能需要查看路径
api。这个问题听起来很熟悉……是的,因为有人删除了它:(因为我写的很紧急……我只想要一个想法,我如何解决它……你真的应该告诉我你想要的结果是什么,你想要实现什么,而不是讨论一个可能做得更好的解决方案……你能定义一下你所说的“不同”是什么意思吗?谢谢你的回答:)但是如果它不是以usr开头会发生什么呢?@Zeynep不客气。如果它不是以“/usr/”开头,那么在我的示例中,您需要更改“/usr/”文本。当然,我想您的意思是:“如果我不知道它是如何提前开始的,会发生什么?”.在这种情况下,我建议你从一开始就对字符串的每个字符进行循环,直到找到差异。然后去掉相等的部分,比较不同的部分。但这是另一个SO问题,现在你已经掌握了它的窍门。是的,这就是问题所在。.我事先不知道:)是的,谢谢,那会有帮助的……当然:)
String path1unique = path1.replaceFirst(commonPrefix, "");
String path2unique = path2.replaceFirst(commonPrefix, "");