我認爲這是一個有趣的編程問題,所以我發佈了它,即使我認爲我有一個足夠好的解決方案的想法,請參閱(*)。如果有人有一個優雅的解決方案,我很想看到它!如何異步修改字符串數組
我正在調用一個方法,該方法調用向服務器發送http請求的外部庫。我需要有K個字符串作爲輸入才能生效,即每次調用外部資源都是一個HTTP請求,我需要緩衝一些數據以提高效率。 (例如,假設K是200,並且在文本中出現的概率爲1%,所以我需要在查找200個輸入參數之前處理20,000個令牌)。
有效地這樣做是:externalHTTP(commaDelimitedString) - >獲取有關每個字符串信息。示例externalHTTP(「foo,bar」) - > [「信息片段1」,「信息片段2」]。 「信息片段1」是關於「富」的地方。
我要替換一個長文本(字符串)與信息片段,但只有在我的HTTP請求緩衝區已滿的「富」與「酒吧」。我仍然希望在等待這種情況發生時繼續閱讀原始字符串。
文本通過分割進行標記(所以我正在處理一個字符串數組)。
I.e.我不想停止執行我的文本處理,因爲我正在等待K字符串緩衝。
起初,我以爲我可以存儲單詞作爲單個字符串對象,我以後更新,但後來我意識到,字符串是不可變的,因此是值調用。
(*)第二個想法是存儲的字(foo和bar)指數和然後按順序插入片段回原始字符串數組當HTTP請求結束。像
class doStuff {
String text[];
LinkedList<Integer> idxList = new LinkedList<Integer>();
public doStuff(String[] t) {
text = t;
int i = 0;
for (String token : text) {
if (shouldReplaceToken(token)) {
replaceToken(i);
}
i++;
//do other work with the tokens
}
}
void replaceToken(int i) {
idxList.add(i);
if (++count > buffSize) {
count = 0;
String commaDelim = "";
ListIterator<Integer> it = idxList.getListIterator(0);
while (it.hasNext()) {
commaDelim += text[it.next()]+",";
}
String[] http_response = http_req(commaDelim);
for (String snippet : http_response) {
idx = idxList.poll(); //this is not elegant, dependent on FIFO order
text[Idx] = snippet;
}
}
}
}
使事情更加複雜的是,我要處理一些較長的文本,所以我將不得不需要有字符串數組,每個文字的矩陣。
我不喜歡類已知的參考
String[] text
或他們的方式我處理這個代碼指數...
希望能看到一些建議:)
編輯:有點變得更清楚了。我真的不能說我正在查找,不透露等,對不起。有些名稱可能與java不同(只有很小的差別)。
你的問題的描述是很難理解。請嘗試編輯問題,以便外部人員更容易遵循。假設我們什麼都不知道,並且對你想要做什麼有清晰的描述。一個具體的例子會很有幫助。 – jahroy
即使是第一句也不可能理解:_I正在調用需要使K字符串作爲輸入的外部資源的方法,即每次調用外部資源都是HTTP請求,並且需要緩衝一些數據有效性._ K字符串是什麼意思? 「緩衝一些數據以提高效率」這句話對解釋你想達到的目標沒有什麼作用。 – jahroy
這基本上是關於在HTTP請求發生時調用特定的子字符串來註冊偵聽器。與異步事件進行比較。 – user1443778