2017-10-06 1 views
0

전 세계로 전송되는 트윗이 본문 인 Java의 Twitter 유형 프로그램에서 작업 중입니다. 해시 태그의 위치와 공백 위치를 찾기 위해 indexOf를 사용하려고합니다. 그래서 접근 자에 대한 하나의 호출로 연결을 통해 모든 해시 태그를 인쇄 할 수 있습니다. 내가 프로그램을 실행하고 언제 라인에 대한 경계 오류를 얻을 :문자열을 통해 이동하는 인덱스가 문자를 식별하지 못합니다 (Java)

allHashtags+=bodyTemp.substring(position, space+1)+" "; 

나는 하위 문자열을 테스트 한 문제는 "위치"변수에 관련이있는 것으로 보인다, 그러나 나는 확실하지 않다 그것을 고치는 법.

public String getAllHashtags() { 
     int indexFrom=0; 
     int position=0; 
     String allHashtags=""; 
     String bodyTemp=body; 
     while(position>-1) { 
      position=bodyTemp.indexOf("#"); 
      int space=bodyTemp.indexOf(" "); 
      allHashtags+=bodyTemp.substring(position, space+1)+" "; 
      bodyTemp=bodyTemp.substring(space+1); 
     } 
     return allHashtags; 
    } 

예 본체 : 여기 내 코드는 "안녕하세요 #world #you을 얼마나"

allHashtags = "#world #you"

뭔가 코드에 대해 불분명 한 경우

/내 설명 , 나에게 알려 줘라. 그러면 나는 그것을 명백하게하려고 노력할 것이다. 도와 줘서 고마워!

그들의 각 하나는 "#"

public static String getAllHashtags() { 

    String body = "Hello #world How are #you"; 
    String tokens[] = body.split("\\s+"); 
    String allHashtags = ""; 

    for (String token : tokens) { 
     if (token.startsWith("#")) { 
      allHashtags += token; 
     } 
    } 
    return allHashtags; 
} 

while 루프를 사용하는 또 다른 방법으로 시작하면 모든 단어 체크 후를 타고 해시 태그의 인덱스를 검색 할 분할을 사용하여

+0

정규식을 사용하지 않는 이유는 무엇입니까? 그리고 그것을 덮어 쓰는 것이 아니라'allHashtags'에 연결하는 것을 의미합니까? 그리고 왜'bodyTemp = bodyTemp.substring (space + 1); '을'indexOf'에 두번째 매개 변수를 제공하는 대신에 사용합니까? –

+0

문자열에 "#"또는 ""공백이 없기 때문에 indexOf() 메서드 호출 중 하나가 -1을 반환하면 음수 위치에서 또는 그 이하의 부분 문자열을 가져 오려고 시도합니다. – JKostikiadis

+0

@Andy Turner 허용되지 않기 때문에 rejex를 사용하지 않습니다. 예, 연결하려고합니다 (올바른 행을 복사하지 않았기 때문에 코드를 업데이트했습니다). 나는 당신의 마지막 질문이 무슨 뜻인지 확신하지 못합니다. – pyr0

답변

0

첫 번째 방법 :

그것은 적어도 오늘 최적의 코드를 기대하지 않는다 오전 3시의
public static String getAllHashtags() { 

    String body = "Hello #world How are #you"; 
    String allHashtags = ""; 

    int index = -1; 
    while ((index = body.indexOf('#')) != -1) { 
     // cut the string up to the first hashtag 
     body = body.substring(index+1); 
     // we need to check if there is a empty space at the end or not 
     if(body.indexOf(' ') != -1) { 
      allHashtags += "#" + body.substring(0,body.indexOf(' ')); 
     }else { 
      allHashtags += "#" + body; 
     } 

    } 
    return allHashtags; 
} 

PS : P

중요 : 단어가 분리되어있는 경우 나 y 탭 또는 새 줄 두 번째 코드는 분명히 작동하지 않을 것입니다 : P 그 이유는 처음 선호하는/선호합니다.

+0

도와 줘서 고마워! 너는 매우 도움이되었다! – pyr0