如果我有一个字符串数组如下:
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)
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
与某些字母相关联,例如:
...然后我会建议您使用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
干杯:)