在java方法中未正确提取字符串

在java方法中未正确提取字符串,java,Java,我有一个从字符串中提取类别的方法。 只要它在长字符串中找到category:,它就应该能够提取并打印,但我不确定我做错了什么。我的方法似乎很准确。但是什么也没有印出来。请告知。提前感谢您提供的任何帮助 字符串: String str = "We have a large inventory of things in our warehouse falling in " + "the category:apperal and the slightly " + "more in demand cat

我有一个从字符串中提取类别的方法。 只要它在长字符串中找到
category:
,它就应该能够提取并打印,但我不确定我做错了什么。我的方法似乎很准确。但是什么也没有印出来。请告知。提前感谢您提供的任何帮助

字符串:

String str = "We have a large inventory of things in our warehouse falling in "
+ "the category:apperal and the slightly "
+ "more in demand category:makeup along with the category:furniture and ….";
用于提取类别的方法:

public static void printCategories(String string){
     int i = 0;
      while (true) {
        int found = string.indexOf("category", i);
        if (found == -1) break;
        int start = found + 8; // start of actual category
        int end = string.indexOf(":", start);
        System.out.println(string.substring(start, end));
        i = end + 1;  // advance i to start the next iteration
      }
}

看起来,您的起始位置等于冒号元素的索引,然后提取类别的结尾

found
等于子字符串
类别的起始位置,
start
位置等于
found+8
并等于冒号的位置(
)。然后你打电话

int end = string.indexOf(":", start);

冒号的索引等于start,在尝试获取子字符串时,可以得到start和end等于。您必须将冒号更改为空格或任何您必须更改的内容,以确定上述代码中类别的结尾。

似乎,您的开始位置等于冒号元素的索引,然后提取类别的结尾

found
等于子字符串
类别的起始位置,
start
位置等于
found+8
并等于冒号的位置(
)。然后你打电话

int end = string.indexOf(":", start);

冒号的索引等于start,在尝试获取子字符串时,可以得到start和end等于。您必须将冒号改为空格或其他任何字符,以确定上述代码中类别的结尾。

这一行最终使end与start相同,因为:正好位于start的位置:

        int end = string.indexOf(":", start);
您要做的是查找一个空格,然后在类别之后再开始一个字符:

        int i = 0;
      while (true) {
        int found = string.indexOf("category", i);
        if (found == -1) break;
        int start = found + 9; // start of actual category
        int end = string.indexOf(" ", start);
        System.out.println(string.substring(start, end));
        i = end + 1;  // advance i to start the next iteration
      }

这一行结束时使end与start相同,因为:正好位于start的位置:

        int end = string.indexOf(":", start);
您要做的是查找一个空格,然后在类别之后再开始一个字符:

        int i = 0;
      while (true) {
        int found = string.indexOf("category", i);
        if (found == -1) break;
        int start = found + 9; // start of actual category
        int end = string.indexOf(" ", start);
        System.out.println(string.substring(start, end));
        i = end + 1;  // advance i to start the next iteration
      }

起始点和结束点具有相同的索引,所以在控制台中打印noting

public static void printCategories(String string) {
    int i = 0;
    while (true) {
        int found = string.indexOf("category", i);
        if (found == -1)
            break;
        int start = found + 9; // start of actual category --> incremented one position to omit `:`
        int end = string.indexOf(" ", start); // added space to split the word after category
        System.out.println(string.substring(start, end));
        i = end + 1; // advance i to start the next iteration
    }
}

起始点和结束点具有相同的索引,所以在控制台中打印noting

public static void printCategories(String string) {
    int i = 0;
    while (true) {
        int found = string.indexOf("category", i);
        if (found == -1)
            break;
        int start = found + 9; // start of actual category --> incremented one position to omit `:`
        int end = string.indexOf(" ", start); // added space to split the word after category
        System.out.println(string.substring(start, end));
        i = end + 1; // advance i to start the next iteration
    }
}

为什么我必须将冒号改为空白?赋值要求colon获取category value子字符串的结尾,因为您要查找的是category名称,而不是category单词,我想。我的意思是只在int end=string.indexOf(“:”,start);,中更改它;,事实上said@Doublespeed在您的例子中,需要空格来获得apperal单词的结尾。如果你留下一个冒号,你将不会得到这个词的结尾,但是还有什么特别的,你只是在寻找从冒号位置开始直到空格的子字符串,为什么我必须把冒号改为空格?赋值要求colon获取category value子字符串的结尾,因为您要查找的是category名称,而不是category单词,我想。我的意思是只在int end=string.indexOf(“:”,start);,中更改它;,事实上said@Doublespeed在您的例子中,需要空格来获得apperal单词的结尾。如果你留下一个冒号,你不会得到这个词的结尾,但是还有什么特别的,你只是在寻找从冒号位置开始直到空格的子字符串我不明白为什么我需要空格?我在找结肠。空间将做什么?
category:item
@Doublespeed之间没有空格,无法确定服装、化妆品或家具的结尾。在您的示例中,我不明白为什么需要空格?我在找结肠。空间将做什么?在您的示例中,
category:item
@Doublespeed之间没有空格来确定服装、化妆品或家具词的结尾