2017-10-06 82 views
0

我正在使用Java中的Twitter類型程序,其中正文是正在發送的推文。我正在嘗試使用indexOf來查找hashtag的位置和空格的位置,以便我可以通過串聯打印出所有hashtags,並且只需調用一次訪問器即可。當我運行程序我得到一個出界錯誤的行: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怎麼樣#你」

allHashtags = 「#world#你」

如果有什麼不清楚的代碼/我的解釋,請讓我知道,我會盡力澄清它。感謝您的幫助!

+0

爲什麼你不只是使用正則表達式?你是否想要連接到'allHashtags'而不是僅僅覆蓋它?爲什麼使用'bodyTemp = bodyTemp.substring(space + 1);'而不是隻將第二個參數提供給'indexOf'? –

+0

那麼,如果其中一個方法調用indexOf()返回-1,因爲該字符串不包含「#」也不包含空格「」,那麼你將嘗試從一個或一直到一個負位置得到一個子字符串。 – JKostikiadis

+0

@Andy Turner我不使用rejex,因爲我不被允許。是的,我試圖連接(我只是更新了代碼,因爲我沒有複製正確的行)。我不確定你最後一個問題的含義。 – pyr0

回答

0

通過拆分把所有的話和檢查後,如果他們中的每一個以「#」

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循環的另一種方式開始和搜索主題標籤的指標第一種方式:

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是凌晨3點不要指望最佳代碼至少今天:P

重要:如果字是分開的b y選項卡或新行第二個代碼顯然不會工作:P那是爲什麼我喜歡/喜歡第一個。

+0

非常感謝你的幫助!你非常有幫助! – pyr0