2014-01-15 45 views
0

獲取「----」之間的字符串如果我有一個字符串數組如下:從陣列

String[] name = {"aval", "H ---- ", "Singh", "Sawh", "Gopi", "G ---- ", "parminder", "kaur", "jaspreet", "asneet", " ---- "}; 

如果字符串「SAWH」用戶搜索。我想要顯示介於「H ----」和「G ----」之間的所有字符串。這就是結果應該顯示「SinghSawhGopi」。我試過如下,但這似乎是錯誤的。我能夠正確地獲得「Sawh」之後的字符串,但之前沒有從「H ----」到「Sawh」。有人對此有何看法?

String keywords = ""; 
int j = 0, k = 0, m = 0, n = 0; 
for(int i = 0; i < name.length; i++){ 
    if(name[i].contains("Sawh")){ 


    for(j = i+1; !name[j].contains(" ---- "); j++){ 
      keywords = keywords + name[j]; 
      k = j; 
     } 
     for(j = i+1; !name[j].contains(" ---- "); j++){ 
      keywords = keywords + name[j]; 
     } 

    } 
} 
System.out.println(keywords); 
+0

您可以在一個解析做到這一點。你能否更詳細地解釋你想要達到什麼目標,以便確定我的建議。 –

+0

我能夠得到碎片,但我想知道是否有任何我不知道的更簡單的方法。 – user3187131

+0

來自一位經驗豐富的程序員的小貼士 - 抓住一張紙和一支筆,準確地記下你的程序的功能(就變量在每個步驟中的變化而言)(或者你可以使用調試器) - 這應該告訴你爲什麼你的代碼不起作用。而且,在你做完這些之後,你應該已經有了一個公平的想法,你需要改變它來修復它(假設你已經考慮過你的程序需要如何去做你想做的事情)。另外'name [j] + keywords'而不是'keywords + name [j]'可能會有所幫助(以防止某些詞的順序相反)。 – Dukeling

回答

0
public static void main (String[] args) { 

    String[] name = {"aval", "H ---- ", "Singh", "Sawh", "Gopi", "G ---- ", "parminder", "kaur", "jaspreet", "asneet", " ---- "}; 
    int length = name.length; 
    String query = "Sawh"; 
    int match_index = -1; 
    for (int i=0; i<length; i++) { 
     if (name[i] != null && name[i].equals(query)) { 
      match_index = i; 
      break; 
     } 
    } 
    String keywords = ""; 
    //Match found 
    if (match_index != -1) { 
     //Forward match. 
     for (int i=match_index+1; i<length; i++) { 
      if (name[i] == null) { 
       continue; 
      } 
      else if (!name[i].contains(" ---- ")) { 
       keywords += name[i]; 
      } 
      else { 
       break; 
      } 
     } 
     //Backwards match. 
     for (int i=match_index; i>=0; i--) { 
      if (name[i] == null) { 
       continue; 
      } 
      else if (!name[i].contains(" ---- ")) { 
       keywords = name[i] + keywords; 
      } 
      else { 
       break; 
      } 
     } 
    } 
    else { 
     //Match not found. 
    } 
    System.out.println(keywords); 
}    

可愛的小主要方法,我趕緊爲你設置。這不是獲得所需字符串的最快方式,也不是最好的方式,它可能不是最乾淨的。但是它很簡單,只需很少的步驟就可以輕鬆完成。

0

這是一個非常簡單的方式做正是你問,使用一些狀態

private static final int STATE_START = 0; 
private static final int STATE_FOUND = 1; 
private static final int STATE_STOP = 2; 

public static void main(final String[] args) { 
    final String[] name = { "aval", "H ---- ", "Singh", "Sawh", "Gopi", "G ---- ", "parminder", "kaur", "jaspreet", "asneet", " ---- " }; 
    String keywords = ""; 

    int state = STATE_START; 
    int i = 0; 
    while ((state != STATE_STOP) && (i < name.length)) { 
     if (name[i].contains(" ---- ")) { 
      if (state == STATE_FOUND) { 
       state = STATE_STOP; 
      } else { 
       keywords = ""; 
      } 
     } else { 
      keywords += name[i]; 
      if (name[i].contains("Sawh")) { 
       state = STATE_FOUND; 
      } 
     } 

     i++; 
    } 

    System.out.println(keywords); // SinghSawhGopi 
} 

,也許你實際上可以檢查你的數據結構......讓我們假設你想一些Strings與一些字母相關聯,例如:

  • 「票據背書擔保」 - >「我」
  • 「星」 - > 「H」
  • 「SAWH」 - > 「H」
  • 「戈皮」 - > 「H」
  • 「成員Parminder」 - > 「G」

。 ..然後我會建議你使用谷歌的Guava Multimaps。下面這段代碼是如何實現的,你要找的內容使用該數據結構:

// Create the data (code used only once) 
final Multimap<String, String> multimap = HashMultimap.create(); 
multimap.put("I", "aval"); 
multimap.put("H", "Singh"); 
multimap.put("H", "Sawh"); 
multimap.put("H", "Gopi"); 
multimap.put("G", "parminder"); 
multimap.put("G", "kaur"); 
multimap.put("G", "jaspreet"); 
multimap.put("G", "asneet"); 

final Multimap<String, String> inversedMultimap = Multimaps.invertFrom(multimap, HashMultimap.<String, String> create()); 

// Find the data you're looking for: 
System.out.println(multimap.get(inversedMultimap.get("Sawh").iterator().next())); 
// Output: [Singh,Sawh, Gopi] 

// Or, if you really need the output you described in your question: 
String keywords = ""; 
for (final String keyword : multimap.get(inversedMultimap.get("Sawh").iterator().next())) { 
    keywords += keyword; 
} 

System.out.println(keywords); // SinghSawhGopi 

乾杯:)