从数组中获取“----”之间的字符串

时间:2014-01-15 00:16:41

标签: java arrays

如果我有一个字符串数组如下:

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);

2 个答案:

答案 0 :(得分: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);
}            

我很快为你设置了可爱的小方法。这不是获得所需字符串的最快方法,也不是最好的方法,而且可能不是最干净的。但这很容易编码,很多小步骤,而且很容易理解。

答案 1 :(得分: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与某些字母相关联,例如:

  • “aval” - &gt; “I”
  • “辛格” - &gt; “H”
  • “Sawh” - &gt; “H”
  • “Gopi” - &gt; “H”
  • “parminder” - &gt; “G”

...然后我会建议您使用Google的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

干杯:)