Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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_String - Fatal编程技术网

Java 为什么字符串在下面的代码中不能正常工作?

Java 为什么字符串在下面的代码中不能正常工作?,java,string,Java,String,我需要567在我的输出,当我调用加速功能,但我不能得到相同的。567 Nat不是567,而是我无法理解的输出。因此,任何人都可以帮助找到这段代码中的问题 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++)

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

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);
}

}

我认为您误解了字符串构造函数的参数。来自

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

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

这就是为什么字符串首先打印空间

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

那你在干什么

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

Ooo,请缩进以便清晰可见。应该是字符串s=新字符串ch,start,i?end+1有什么问题?/From String javadoc:bytes—要解码为字符偏移量的字节—要解码的第一个字节的索引长度—要解码的字节数—如果您在Eclipse中,您可以通过高亮显示all并按ctrl+i来缩进所有字节
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