向String数组添加值时会出现一个奇怪的问题,该数组后来使用哈希映射进行数组排序。我有一个文件名XFR900a,并使用以下代码将XFR900部件添加到数组中;
private ArrayList<String> Types = new ArrayList<String>();
...
Types.add(name.substring(0,(name.length() - 1));
System.out.println(name.substring(0,(name.length() - 1));
我甚至打印了提供&#34; XFR900&#34;的行,但是当我使用以下代码时,后面的数组排序的行为会有所不同;
Types.add("XFR900");
System.out.println(name.substring(0,(name.length() - 1));
这只是手动完成的子串部分,非常令人困惑。
是否有任何替代子串的好方法,因为那里必须有一些奇怪的非ascii字符?
菲尔
更新
感谢大家的评论。以下是一些稍后比较字符串的代码;
for (int i=0;i< matchedArray.size();i++){
//run through the arrays
if (last == matchedArray.get(i)) {
//add arrays to a data array
ArrayList data = new ArrayList();
data.add(matchedArray1.get(i));
data.add(matchedArray2.get(i));
data.add(matchedArray3.get(i));
data.add(matchedArray4.get(i));
data.add(matchedArray5.get(i));
//put into hash map
map.put(matchedArray.get(i), data);
}
else {
//TODO
System.out.println("DO NOT MATCH :" + last + "-" + matchedArray.get(i));
正如您所看到的,我添加了一个测试System.out.println(&#34;不匹配&#34; ......以下是输出的一些内容;
不匹配:FR99-XFR900 不匹配:XFR900-XFR900
我只在XFR900a文件名上运行子字符串。问题是,最后要打印的测试行!= matchedArray.get(i)然而,当打印到显示器时它们是相同的。
菲尔
答案 0 :(得分:3)
您绝不应使用==
运算符来比较字符串的内容。 ==
检查它是否是同一个对象。写下last.equals(matchedArray.get(i))
代替。 equals()
方法检查对象是否相等,而不是它们是否相同。在String
的情况下,它检查两个字符串是否由相同的字符组成。这可能会消除你的奇怪行为。
PS:==
对字符串的行为有点不可预测,因为java虚拟机做了一些优化。如果两个字符串相等,则jvm可能为两者使用相同的对象。这是可能的,因为String
对象无论如何都是不可变的。如果您手动记下子字符串,这将解释行为上的差异。在一种情况下,jvm会优化,而另一种情况则不会。
答案 1 :(得分:0)
使用.equals()
而不是==
,因为它们是字符串!
if (last.equals(matchedArray.get(i))) {}
答案 2 :(得分:0)
如果要检查值,请不要使用==运算符,因为运算符将检查Object引用相等性,使用equals运算符检查值而不是引用,即
for (int i=0;i< matchedArray.size();i++){
//run through the arrays
if (last.equals(matchedArray.get(i))) { // Line edited
//add arrays to a data array
ArrayList data = new ArrayList();
data.add(matchedArray1.get(i));
data.add(matchedArray2.get(i));
data.add(matchedArray3.get(i));
data.add(matchedArray4.get(i));
data.add(matchedArray5.get(i));
//put into hash map
map.put(matchedArray.get(i), data);
}
else {
//TODO
System.out.println("DO NOT MATCH :" + last + "-" + matchedArray.get(i));