替代子串

时间:2012-07-31 16:31:32

标签: java arraylist substring

向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)然而,当打印到显示器时它们是相同的。

菲尔

3 个答案:

答案 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));