为什么String在以下代码中无法正常工作?

时间:2015-02-05 14:53:56

标签: java string

当我调用加速功能时,我的输出需要567但是我无法得到相同的功能。而不是得到567,“567 Nat”是我无法理解的输出。所以,任何人都可以帮助找到此代码中的问题。

class New {
static void check(String m) {
    int flag = 0;
    int start = 0;
    int end = 0;
    char ch[] = m.toCharArray();
    for (int i = 0; i < m.length(); i++) {
        if (ch[i] == 32) {
            flag = 1;
            break;
        } else end = i;
    }
    if (flag == 1) {
        String s = new String(ch, start, end + 1);
        System.out.println(s);
        accelerate(m, s, end + 1);
    }
}

static void accelerate(String m, String s, int k) {
    char ch[] = m.toCharArray();
    char ch1[] = s.toCharArray();
    int flag = 0;
    int start = k;
    int end = k;
    System.out.println(k);
    for (int i = k + 1; i < ch.length; i++) {
        if (ch[i] == 32) {
            flag = 1;
            break;
        } else {
            end++;
            System.out.println(ch[i]);
        }
    }
    if (flag == 1) {
        System.out.println(ch);
        System.out.println(start);
        System.out.println(end);
        String s1 = new String(ch, start, end + 1);
        System.out.println(s1);
        //accelerate(m,s1,end+1);
    }
}

public static void main(String... s) {
    String k = "India 567 Nation. I LoVe India";
    check(k);
}

}

1 个答案:

答案 0 :(得分:1)

我认为您误解了带有该参数的String构造函数.From Java Docs

public String(byte[] bytes,
      int offset,
      int length)
  

分配一个新的String,其中包含来自子数组的字符   字符数组参数。 offset参数是的索引   子数组的第一个字符和count参数指定   子阵列的长度。子阵列的内容被复制;   后续修改字符数组不会影响   新创建的字符串。

偏移量是要跳过的字符数,而不是字符数组中要开始的索引。

0 1 2 3 4    //array
1 2 3 4 5    //offset skip character starts with one
I n d i a

所以这就是字符串在第一时间打印空间的原因

长度是从偏移开始显示的字符数,而不是字符数组中的结束索引。

那你在做什么

new String(ch,5,9)   //starting from space to the i
而你应该做

new String(ch,6,3) //leaving "India " and getting next 3 characters i.e. 567

DEMO