2017-11-19 5 views
0

私はweather APIを実装する必要があるpircbotを使用してJava IRC APIプロジェクトを行っています。しかし、それをテストする途中で何かがメッセージ文字列を処理しています。 JavaでindexOfを使用して文字列を分割する際のトラブル

オースティンの天気突風

、これには、ユーザーが天気APIを使用したい示します

EX(市)天気(コンポーネント)

:私は、ユーザーが入力SO-のようにそれをやろうとしていますgustの情報をオースティンにします。 これを行うには、文字列を "分割して"(都市)と(コンポーネント)部分文字列をそれぞれの文字列に入れたいと思います。

public static void main (String args[]) { 
     String message = "Austin weather gust"; 

     int firstIndex = message.indexOf("weather"); 
     System.out.println(firstIndex); 
    } 
といじりの後、のindexOfはのために働くようだ:

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

、それが動作していないようでしたので、私はテストクラスで実験を開始した:そうは次のように私はそれを実行しようとしました「オースティン」に含まれるすべての文字と部分文字列ですが、それ以降は何もありません。 "weather"、 "w"、 "gust"のような "Austin"の後のものでは、indexOfは-1を返します。これは奇妙です。何か案は?

また、私が何かを工夫する必要があるかどうか教えてください。私はこのことがうまく説明されていないと感じています。

+0

どのバージョンのJavaを使用していますか(java -version)? – bb94

答えて

1

あなたが入力文字列が例外なくあなたは上記の与えたフォーマットでかつで常にあるを確認することができた場合は、単に迅速市&部品の値を取得するには、次の方法を使用することができます。

String inputString = "Austin weather gust"; 
    String[] separatedArray = inputString.split(" "); 
    String city = separatedArray[0]; 
    String component = separatedArray[2]; 
+0

これがうまくいった!ありがとうございました – Alisha

+0

@Alishaようこそ。私はそれがうまくいってうれしい! –

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

} 
関連する問題