使用 while 循环、子字符串和 indexOf 的简单 Java 问题
Simple Java question using while loop, substring, and indexOf
我正在做一个学习 Java 的练习,我应该在其中编写一个方法来将单词“类别:”之后的所有项目打印到屏幕上。这是我的尝试:
public static void main(String[] args) {
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 _.";
printCategories(str);
}
public static void printCategories(String passedString) {
int startOfSubstring = passedString.indexOf(":") + 1;
int endOfSubstring = passedString.indexOf(" ", startOfSubstring);
String categories = passedString.substring(startOfSubstring,endOfSubstring);
while(startOfSubstring > 0) {
System.out.println(categories);
startOfSubstring = passedString.indexOf((":") + 1, passedString.indexOf(categories));
System.out.println(startOfSubstring);
System.out.println(categories);
}
}
所以程序应该打印:
有吸引力
化妆
家具
我的尝试是程序应该打印它找到起始索引为“:”和结束索引为“”的子字符串。然后它再次做同样的事情,只是从变量 str 的开头开始,这次它从找到的最后一个类别的开头开始。
一旦找不到更多的“:”,indexOf(startOfSubstring 的一部分)将 return -1 并且循环将终止。但是,在打印第一个类别后,它会保持 returning -1 并在找到下一个类别之前终止。
两行:
System.out.println(startOfSubstring);
System.out.println(categories);
确认在打印第一个类别后是returning -1,最后一行确认类别变量仍然定义为“apperal”。如果我注释掉这一行:
startOfSubstring = passedString.indexOf((":") + 1, passedString.indexOf(categories));
它 return 的 startOfSubstring 为 77。所以它与该行有关,并试图更改导致它 return 的 indexOf 方法中搜索位置的开始 - 1 过早,但我无法弄清楚为什么会这样。我花了最后几个小时试图弄清楚...
请帮忙:(
我已更正(在评论中)您设置 startOfSubstring 新值的位置
while(startOfSubstring > 0) { // better if you do startOfSubstring != -1 IMO
System.out.println(categories);
// this should be startOfSubstring = passedString.indexOf(":", startOfSubstring +1);
startOfSubstring = passedString.indexOf((":") + 1, passedString.indexOf(categories));
System.out.println(startOfSubstring);
System.out.println(categories);
}
程序有几个问题:
您正在 passedString
中搜索 (":") + 1
,这是字符串 ":1"
,可能不是您想要的。
您应该在循环内计算 endOfSubstring
和 categories
。
这可能接近您想要的:
public static void printCategories(String passedString) {
int startOfSubstring = passedString.indexOf(":") + 1;
while(startOfSubstring > 0) {
int endOfSubstring = passedString.indexOf(" ", startOfSubstring);
// If "category:whatever" can appear at the end of the string
// without a space, adjust endOfSubstring here.
String categories = passedString.substring(startOfSubstring, endOfSubstring);
// Do something with categories here, maybe print it?
// Find next ":" starting with end of category string.
startOfSubstring = passedString.indexOf(":", endOfSubstring) + 1;
}
}
我正在做一个学习 Java 的练习,我应该在其中编写一个方法来将单词“类别:”之后的所有项目打印到屏幕上。这是我的尝试:
public static void main(String[] args) {
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 _.";
printCategories(str);
}
public static void printCategories(String passedString) {
int startOfSubstring = passedString.indexOf(":") + 1;
int endOfSubstring = passedString.indexOf(" ", startOfSubstring);
String categories = passedString.substring(startOfSubstring,endOfSubstring);
while(startOfSubstring > 0) {
System.out.println(categories);
startOfSubstring = passedString.indexOf((":") + 1, passedString.indexOf(categories));
System.out.println(startOfSubstring);
System.out.println(categories);
}
}
所以程序应该打印:
有吸引力
化妆
家具
我的尝试是程序应该打印它找到起始索引为“:”和结束索引为“”的子字符串。然后它再次做同样的事情,只是从变量 str 的开头开始,这次它从找到的最后一个类别的开头开始。
一旦找不到更多的“:”,indexOf(startOfSubstring 的一部分)将 return -1 并且循环将终止。但是,在打印第一个类别后,它会保持 returning -1 并在找到下一个类别之前终止。
两行:
System.out.println(startOfSubstring);
System.out.println(categories);
确认在打印第一个类别后是returning -1,最后一行确认类别变量仍然定义为“apperal”。如果我注释掉这一行:
startOfSubstring = passedString.indexOf((":") + 1, passedString.indexOf(categories));
它 return 的 startOfSubstring 为 77。所以它与该行有关,并试图更改导致它 return 的 indexOf 方法中搜索位置的开始 - 1 过早,但我无法弄清楚为什么会这样。我花了最后几个小时试图弄清楚...
请帮忙:(
我已更正(在评论中)您设置 startOfSubstring 新值的位置
while(startOfSubstring > 0) { // better if you do startOfSubstring != -1 IMO
System.out.println(categories);
// this should be startOfSubstring = passedString.indexOf(":", startOfSubstring +1);
startOfSubstring = passedString.indexOf((":") + 1, passedString.indexOf(categories));
System.out.println(startOfSubstring);
System.out.println(categories);
}
程序有几个问题:
您正在
passedString
中搜索(":") + 1
,这是字符串":1"
,可能不是您想要的。您应该在循环内计算
endOfSubstring
和categories
。
这可能接近您想要的:
public static void printCategories(String passedString) {
int startOfSubstring = passedString.indexOf(":") + 1;
while(startOfSubstring > 0) {
int endOfSubstring = passedString.indexOf(" ", startOfSubstring);
// If "category:whatever" can appear at the end of the string
// without a space, adjust endOfSubstring here.
String categories = passedString.substring(startOfSubstring, endOfSubstring);
// Do something with categories here, maybe print it?
// Find next ":" starting with end of category string.
startOfSubstring = passedString.indexOf(":", endOfSubstring) + 1;
}
}