我正在使用pircbot进行Java IRC API项目,这需要我实现一个天气API。但是,阻碍测试它的方法是处理消息String。我试图这样做 - 用户输入:
(城市)天气(组件)
前:奥斯汀天气阵风
这表示用户想要使用天气API来获取 Austin 中的阵风信息。 为此,我想“拆分”字符串并将(City)和(组件)子字符串放在它们自己的字符串中。我试着这样做:
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);
}
这似乎没有用,所以我开始在测试类中进行实验:
public static void main (String args[]) {
String message = "Austin weather gust";
int firstIndex = message.indexOf("weather");
System.out.println(firstIndex);
}
在搞乱之后,indexOf似乎适用于“Austin”中包含的每个char和substring,但之后却没有。对于“Austin”之后的任何事情,比如“天气”,“w”或“阵风”,indexOf返回-1,这很奇怪,因为我很肯定那些东西都在那里哈哈。有什么想法吗?
另外,如果我需要详细说明,请告诉我。我有一种感觉,这被解释得很糟糕。
答案 0 :(得分:1)
如果您可以确定输入字符串始终,您使用上面提供的格式并且无例外,您只需使用以下方法获得城市和城市组件价值很快。
String inputString = "Austin weather gust";
String[] separatedArray = inputString.split(" ");
String city = separatedArray[0];
String component = separatedArray[2];
答案 1 :(得分:0)
请查看以下评论。
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
}
解。如果您的输入格式与您声称的相同,则可以使用2中的任何一种。
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);
}