使用java

时间:2017-11-19 08:05:28

标签: java string api indexof irc

我正在使用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,这很奇怪,因为我很肯定那些东西都在那里哈哈。有什么想法吗?

另外,如果我需要详细说明,请告诉我。我有一种感觉,这被解释得很糟糕。

2 个答案:

答案 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);

}