在 java 中使用 indexOf 拆分字符串时遇到问题
Trouble splitting up a String using indexOf in java
我正在使用 pircbot 做一个 Java IRC API 项目,需要我实现天气 API。然而,在测试它时遇到的问题是处理消息字符串。我正在尝试这样做 - 用户输入:
(城市)天气(分量)
例如:奥斯汀阵风
这表明用户想要使用天气 API 来获取 Austin 中的 gust 信息。
为此,我想 "split up" 字符串并将 (City) 和 (component) 子字符串放入它们自己的字符串中。我试着这样做:
else if (message.contains("weather")) {
String component;
String city;
int indexA = 0;
int indexB = message.indexOf(" weather");
int indexC = (message.indexOf("weather") + 6);
int indexD = message.length() + 1;
city = message.substring(indexA, indexB);
component = message.substring(indexC, indexD);
startWebRequestName(city, component, sender, channel);
}
这似乎没有用,所以我开始进行测试 class:
public static void main (String args[]) {
String message = "Austin weather gust";
int firstIndex = message.indexOf("weather");
System.out.println(firstIndex);
}
在搞砸之后,indexOf 似乎对 "Austin" 中包含的每个字符和子字符串都有效,但之后的任何内容都无效。对于 "Austin" 之后的任何内容,例如 "weather"、"w" 或 "gust"、indexOf returns -1,这很奇怪,因为我确信那些东西在那里哈哈。有什么想法吗?
此外,如果我需要详细说明,请告诉我。我觉得这解释得有点糟糕。
如果您可以确保输入字符串总是您上面给出的格式并且没有例外,您可以简单地使用以下方法快速获取城市和组件值。
String inputString = "Austin weather gust";
String[] separatedArray = inputString.split(" ");
String city = separatedArray[0];
String component = separatedArray[2];
请找到以下评论。
private static void cityFetcher(String message) {
if (message.contains("weather")) {
String component;
String city;
int indexA = 0;
int indexB = message.indexOf(" weather");
int indexC = (message.indexOf("weather") + 6);
System.out.println(indexC); //13
int indexD = message.length() + 1;
System.out.println(indexD);//20
city = message.substring(indexA, indexB);
System.out.println(city);//Austin
component = message.substring(indexC, indexD);//if no -1 then ooi bound exception as your trying to access until 20th element. When your input size is only 19.
System.out.println(component);// r gust
}
解决方案。如果您声称的输入格式相同,则可以使用这两种格式中的任何一种。
private static void cityFetcher(String input){
//Solution 1
String[] params=input.split("\s");
for(String s:params){
System.out.println(s);
}
//Solution 2
String city=input.substring(0,input.indexOf(" "));
System.out.println(city);
String component=input.substring(input.lastIndexOf(" ")+1,input.length());
System.out.println(component);
}
我正在使用 pircbot 做一个 Java IRC API 项目,需要我实现天气 API。然而,在测试它时遇到的问题是处理消息字符串。我正在尝试这样做 - 用户输入:
(城市)天气(分量)
例如:奥斯汀阵风
这表明用户想要使用天气 API 来获取 Austin 中的 gust 信息。 为此,我想 "split up" 字符串并将 (City) 和 (component) 子字符串放入它们自己的字符串中。我试着这样做:
else if (message.contains("weather")) {
String component;
String city;
int indexA = 0;
int indexB = message.indexOf(" weather");
int indexC = (message.indexOf("weather") + 6);
int indexD = message.length() + 1;
city = message.substring(indexA, indexB);
component = message.substring(indexC, indexD);
startWebRequestName(city, component, sender, channel);
}
这似乎没有用,所以我开始进行测试 class:
public static void main (String args[]) {
String message = "Austin weather gust";
int firstIndex = message.indexOf("weather");
System.out.println(firstIndex);
}
在搞砸之后,indexOf 似乎对 "Austin" 中包含的每个字符和子字符串都有效,但之后的任何内容都无效。对于 "Austin" 之后的任何内容,例如 "weather"、"w" 或 "gust"、indexOf returns -1,这很奇怪,因为我确信那些东西在那里哈哈。有什么想法吗?
此外,如果我需要详细说明,请告诉我。我觉得这解释得有点糟糕。
如果您可以确保输入字符串总是您上面给出的格式并且没有例外,您可以简单地使用以下方法快速获取城市和组件值。
String inputString = "Austin weather gust";
String[] separatedArray = inputString.split(" ");
String city = separatedArray[0];
String component = separatedArray[2];
请找到以下评论。
private static void cityFetcher(String message) {
if (message.contains("weather")) {
String component;
String city;
int indexA = 0;
int indexB = message.indexOf(" weather");
int indexC = (message.indexOf("weather") + 6);
System.out.println(indexC); //13
int indexD = message.length() + 1;
System.out.println(indexD);//20
city = message.substring(indexA, indexB);
System.out.println(city);//Austin
component = message.substring(indexC, indexD);//if no -1 then ooi bound exception as your trying to access until 20th element. When your input size is only 19.
System.out.println(component);// r gust
}
解决方案。如果您声称的输入格式相同,则可以使用这两种格式中的任何一种。
private static void cityFetcher(String input){
//Solution 1
String[] params=input.split("\s");
for(String s:params){
System.out.println(s);
}
//Solution 2
String city=input.substring(0,input.indexOf(" "));
System.out.println(city);
String component=input.substring(input.lastIndexOf(" ")+1,input.length());
System.out.println(component);
}