2017-11-19 18 views
0

weather API를 구현해야하는 pircbot을 사용하여 Java IRC API 프로젝트를 수행하고 있습니다. 그러나 테스트하는 방식에서 메시지 문자열을 처리하는 것이 있습니다.Java에서 indexOf를 사용하여 문자열을 분리 할 때 문제가 발생했습니다.

(도시) 날씨 (구성 요소)

예 : 오스틴 날씨 돌풍

을 본 사용자가 날씨 API를 사용하려는 나타내는 I는 사용자를 소위처럼 할 노력하고있어 입력 돌풍 정보는 오스틴입니다. 이렇게하려면 문자열을 "분할하여"(도시) 및 (구성 요소) 부분 문자열을 자신의 문자열에 넣고 싶습니다. 내가 테스트 클래스에서 실험을 시작

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)"에 포함 된 모든 문자 및 하위 문자열. "weather", "w"또는 "gust"와 같은 "Austin"이후의 모든 항목에 대해 indexOf는 -1을 반환합니다. 이는 내가 거기에있는 것이 긍정적이기 때문에 이상합니다. 어떤 아이디어?

기타 문의 사항이 있으면 알려 주시기 바랍니다. 나는 이것이 일종의 잘못 설명되었다고 느낀다.

+0

(java -version) 어떤 Java 버전을 사용하고 있습니까? – 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); 

}