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

时间:2015-10-17 02:56:47

标签: java

我有一个应该从字符串中提取类别的方法。 它在长字符串中找到category:<something>的任何地方,它应该能够提取并打印,但我不确定我做错了什么。我的方法似乎准确。但没有任何东西正在印刷。请指教。提前感谢您提供的任何帮助。

字符串:

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

3 个答案:

答案 0 :(得分:3)

这一行的结尾与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
      }

答案 1 :(得分:2)

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

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

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

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

答案 2 :(得分:0)

开始和结束指向相同的索引,因此注释将在控制台中打印。

SelectedValue.Text