Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何比较字符串数组?_Java_Arrays - Fatal编程技术网

Java 如何比较字符串数组?

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

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