如何比较字符串数组?

时间:2013-08-09 19:39:32

标签: java arrays

我有这个代码示例。我想比较包含路径的字符串。问题出在其他部分......在这个例子中,他们有/和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;
}

2 个答案:

答案 0 :(得分:0)

对于纯String操纵,忘记File个对象,您可以使用replaceFirstsubstringindexOf的组合来摆脱“ / usr /“在您的路径中Strings

以下是一个例子:

// 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

答案 1 :(得分: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;
    }
}

如果您不喜欢字符串赋值,请使用StringBuffer instaed。现在获取路径:

String path1unique = path1.replaceFirst(commonPrefix, "");
String path2unique = path2.replaceFirst(commonPrefix, "");