我需要缩短char []。我只是想摆脱第一个字母

时间:2011-08-04 06:48:20

标签: java

每次通过代码时,我都需要将char []缩短一个字母。我正在使用的论点是hello和hel。它应该返回true false false。至少这是我认为应该回归的。我认为到目前为止我已经接近了:

private void doDountSubStringMatchRecursive(String target, String key){
    char[] targetChar= target.toCharArray();//long one
    char[] keyChar= key.toCharArray();//short one
    for (int i = 0; i <=targetChar.length- keyChar.length; i++ ){
        System.out.println(testHelper(targetChar , keyChar));
        String recursive = targetChar.toString(); //Turns into a string
        targetChar = recursive.substring(1).toCharArray();//moves my string starting point over by one and converts the char[]
        System.out.println(targetChar.toString() + "  " +  keyChar.toString() );
    }
}


private boolean testHelper(char[] targetChar , char[] keyChar){
    boolean test = false;

    for (int i=0; i <= keyChar.length - 1; i++){ // runs through the char[] and states the test         
        if (keyChar[i] == targetChar[i]) {
            test =  true;
        } else {
            return false;
        }
    }
    return test;

}

这是我的输出:

true
[C@24c21495  [C@41d5550d
false
[C@1cc2ea3f  [C@41d5550d
false
[C@40a0dcd9  [C@41d5550d
false
[C@1034bb5  [C@41d5550d
false
[C@7f5f5897  [C@41d5550d
false
[C@4cb162d5  [C@41d5550d
false
[C@11cfb549  [C@41d5550d
false
[C@5b86d4c1  [C@41d5550d
false
[C@70f9f9d8  [C@41d5550d

我现在不知道这是做什么的。是的,我知道我可以通过使用indexof(key)找到密钥的出现。

2 个答案:

答案 0 :(得分:2)

目前还不清楚你的代码应该做什么,因为你没有真正明确地说明问题。但是,您应该立即修复一个错误:

targetChar.toString()

不符合您的想法。它为您提供了char数组对象的String表示(类似于“C @ 24c21495”),将该数组解释为字符序列。如果您想要String表示数组中的字符序列,那么您需要调用

String.valueOf(targetChar)

new String(targetChar)

char[]转换为更有用的String

此更改可能有助于您调试其余代码。

答案 1 :(得分:1)

首先,在java中,array.toString()没用;你必须使用Arrays.toString(array)。将您的代码更改为:

System.out.println(Arrays.toString(targetChar) + "  " +  Arrays.toString(keyChar) );

仅供参考,Josh Bloch认为这是java中的一个重大错误。我同意。