-1

我有这个代码示例。我想与包含路径的字符串进行比较。问题出在 else 部分......在这个例子中他们有 / 和 usr 在一起......我想比较他们不同点之后的长度......谢谢你的帮助

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;
}
4

2 回答 2

0

对于纯粹的String操作,并忘记File对象,您可以使用和replaceFirst的组合来摆脱路径中的“/usr/” 。substringindexOfStrings

这是一个例子:

// 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
于 2013-08-09T19:53:41.163 回答
0

您可以找到公共前缀子字符串,如下所示:

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;
    }
}

如果您不喜欢 String 分配,请使用 StringBuffer。现在获取路径:

String path1unique = path1.replaceFirst(commonPrefix, "");
String path2unique = path2.replaceFirst(commonPrefix, ""); 
于 2013-08-09T20:06:44.097 回答