已解決。答案是更換String.contains與ArrayList行爲異常
for (int i = 0; i < results.size(); i++)
{
lowerField = results.get(i)[2].toLowerCase();
if(lowerField.equals(search));
{
finalResults.add(results.get(i));
}
}
與
for(String[] searchItems : results)
{
lowerField = searchItems[2].toLowerCase();
if(lowerField.equals(search))
{ // or lowerField.contains(search)
finalResults.add(searchItems);
}
}
看來,出於某種原因,原始添加(results.get(I))語句的某處混亂的東西,而加(searchItems)聲明很好地播放。
爲了幫助其他人有類似的問題,請幫我清理和澄清這個問題,以適當的標準,因此它可以幫助別人。再次感謝您的幫助
public static ArrayList<String[]> searchLog(ArrayList<String> searchMe, String action)
{
//ArrayList full of String arrays to break up and hold each line of the passed ArrayList
ArrayList<String[]> results = new ArrayList<String[]>();
//Same structure as above, intended to hold the lines matching the user's search criteria
ArrayList<String[]> finalResults = new ArrayList<String[]>();
//String variable used to hold the current field we're searching "toLowerCase"
String lowerField = null;
//For each string in the input ArrayList...
for (String str : searchMe)
{
//Add each line (after splitting it into an array) to the "results" ArrayList
results.add(str.split("~"));
}
//If the user chose to search on "Partner ID"
if (action.equals("ptnr"))
{
//Print line with criteria and search field
System.out.println("Searching on Partner ID for " + search + "....");
//For each line (string array) in the "results" ArrayList
for(String[] searchItems : results)
{
//Set "lowerField" equal to the current line (string array) sub 1 where Partner ID is located, and set it toLowerCase
lowerField = searchItems[1].toLowerCase();
//If the cell we're searching contains the user's search criteria
if(lowerField.contains(search))
{
//Then add the whole line to the finalResults ArrayList that we will return from this function.
finalResults.add(searchItems);
}
}
}
return finalResults;
}
感謝:
正確的工作代碼在原來的問題速配樣本!
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~找到匹配項後,該函數將整個數組添加到第二個ArrayList中,其中包含搜索結果。
我還試圖簡單地移除任何沒有從原始的ArrayList與搜索標準匹配,以節省不必要地具有的第二個的所述存儲器並取得相同的不正確的結果這種方式爲好。功能如下:
注意:在用於此處之前,SEARCH是一段用戶輸入(存儲在公共靜態「全局」中),已經在我的Main函數中設置爲「toLowerCase」。
public static ArrayList<String[]> searchLog(ArrayList<String> searchMe, String action)
{
ArrayList<String[]> results = new ArrayList<String[]>();
ArrayList<String[]> finalResults = new ArrayList<String[]>();
String lowerField = null;
for (String str : searchMe)
{
results.add(str.split("~"));
}
if (action.equals("ptnr"))
{
System.out.println("Searching on Partner ID for " + search + "....");
for (int i = 0; i < results.size()-1; i++)
{
lowerField = results.get(i)[1].toLowerCase();
if(lowerField.equals(search))
{
//System.out.println("one added");
finalResults.add(results.get(i));
}
}
}
return finalResults;
}
我使用lowerField.equals(搜索),lowerField.contains(搜索),並且lowerField.matches(搜索),以包括若干變型和字符串操作它們的嘗試。
我理想的結果是使用「載,」作爲「時間戳」,用戶可以搜索是不切實際的具體包含的不僅僅是一個日期和時間,他們可以現實上搜索更多信息。
現在爲我的結果。
當我運行的功能和搜索「PTNR,」我的結果是正確的。當我搜索其他兩個時,我的結果會返回正確的NUMBER個條目(當我有一個println指示一個不匹配的條目已被刪除時,包括正確的REMOVED數量),但是保留的條目並展示了不匹配的線以及匹配在一起的混合包。同樣,打印輸出的NUMBER行是正確的,但行本身不僅僅是匹配行。
這是調用searchLog()函數:
if(srv)
{
System.out.println("");
System.out.println("============================= SEARCH RESULTS ===================================");
System.out.println("");
ArrayList<String[]> results = searchLog(line, "ptnr");
for (int x = 0; x < results.size(); x++)
System.out.println(results.get(x)[0] + " " + results.get(x)[1] + " " + results.get(x)[2] + " " + results.get(x)[3] + " " + results.get(x)[4] + " ms.");
System.out.println("");
System.out.println("============================= END SEARCH RESULTS ===================================");
System.out.println("");
}
以上,「線」是我通過搜索ArrayList和「SRV」的「如果」塊是一個全球性的布爾集通過用戶輸入。所有這些目前都在工作,而不是搜索和過濾。
在此先感謝你們,讓我知道如果你需要任何更多的信息!
編輯:是的,我知道我用了一個冒泡排序...讓火焰開始哈哈,但它已經有一段時間了,這是一個時間敏感的新工作。在運行這個util的服務器上,在處理的數據量最小(每次運行300行)的情況下,泡泡在遊標閃爍時仍然能夠實現其目標。 :)
編輯2:樣品輸入數據:
2013-10-15 08:28:31,514~stQAEFV~establishAgreementSummary~2~5234 ms.
2013-10-15 08:28:22,442~sgFASTOL~retrieveParty~2~1776 ms.
2013-10-15 08:27:37,333~sfRPDesktop~modifyParty~2~1744 ms.
2013-10-15 08:28:14,719~sgITL~retrieveParty~2~1702 ms.
2013-10-15 08:28:27,755~sgFASTOL~establishParty~2~1682 ms.
2013-10-15 08:28:39,677~sfRPDesktop~retrieveParty~2~1679 ms.
2013-10-15 08:27:55,768~sgBLD~searchAgreementSummary~2~1495 ms.
2013-10-15 08:27:46,272~sgCSCWB~searchAgreementSummary~1~1402 ms.
2013-10-15 08:27:49,660~sfRPDesktop~retrieveParty~2~1395 ms.
2013-10-15 08:27:39,547~sgHERYN~searchAgreementSummary~1~1341 ms.
2013-10-15 08:27:47,028~sgCSCWB~retrieveCustomerProfile~1~1323 ms.
2013-10-15 08:27:29,795~sgFASTOL~retrieveParty~2~1296 ms.
2013-10-15 08:27:44,520~sfRPDesktop~retrieveParty~2~1290 ms.
2013-10-15 08:28:04,398~sgFASTOL~retrieveParty~2~1284 ms.
輸出時的「PTNR」搜尋工作正常,則「Y」(其不應當永遠產生結果時間戳搜索時輸出.. 。)返回所有行:
============================= SEARCH RESULTS ===================================
Searching on Partner ID for sgfastol....
before sort
after sort
2013-10-15 08:28:22,442 sgFASTOL retrieveParty 2 1776 ms.
2013-10-15 08:28:27,755 sgFASTOL establishParty 2 1682 ms.
2013-10-15 08:27:29,795 sgFASTOL retrieveParty 2 1296 ms.
2013-10-15 08:28:04,398 sgFASTOL retrieveParty 2 1284 ms.
============================= SEARCH RESULTS ===================================
Searching on Timestamp for y....
before sort
after sort
2013-10-15 08:28:31,514 stQAEFV establishAgreementSummary 2 5234 ms.
2013-10-15 08:28:22,442 sgFASTOL retrieveParty 2 1776 ms.
2013-10-15 08:27:37,333 sfRPDesktop modifyParty 2 1744 ms.
2013-10-15 08:28:14,719 sgITL retrieveParty 2 1702 ms.
2013-10-15 08:28:27,755 sgFASTOL establishParty 2 1682 ms.
2013-10-15 08:28:39,677 sfRPDesktop retrieveParty 2 1679 ms.
2013-10-15 08:27:55,768 sgBLD searchAgreementSummary 2 1495 ms.
2013-10-15 08:27:46,272 sgCSCWB searchAgreementSummary 1 1402 ms.
2013-10-15 08:27:49,660 sfRPDesktop retrieveParty 2 1395 ms.
2013-10-15 08:27:39,547 sgHERYN searchAgreementSummary 1 1341 ms.
2013-10-15 08:27:47,028 sgCSCWB retrieveCustomerProfile 1 1323 ms.
2013-10-15 08:27:29,795 sgFASTOL retrieveParty 2 1296 ms.
2013-10-15 08:27:44,520 sfRPDesktop retrieveParty 2 1290 ms.
2013-10-15 08:28:04,398 sgFASTOL retrieveParty 2 1284 ms.
最後,我知道它是馬虎。我道歉。我實際上已經投入了三個小時,其中一個試圖找出這個搜索。這是一個用Java編寫的unix util(對unix不太熟悉)(我是一個.NET開發人員),所以我略微超出了我的元素。清理工作一旦發揮作用就會發生。如果你願意,這只是一個「粗略草案」,只是爲了顯示一個大型項目的可行性(或缺乏)。儘管謝謝你的迴應!每個答案的具體評論。
-Tom
你已經表現出了很大的代碼,但它並不完全清楚這一切是相關的。爲什麼在迭代時忽略'finalResults'和'results'的最後一個元素? (你的for循環的形式是for(int i = 0; i
將searchLog方法中的實際輸入值以及預期結果和實際結果的示例非常有用。如果您可以提供輸入和搜索字符串的完整示例,我們可以幫您解決這個問題。 – axiopisty
@JonSkeet修復了迭代器,不知道我在那裏做了什麼。不影響我的搜索結果。 – roflplanes