为什么StartsWith给我一个错误的项目

时间:2018-03-28 14:08:11

标签: android string compare match

我正在使用方法service apache2 reload来比较2个字符串,看看其中一个字符串是否以引入的字符开头。

CODE

String.startsWith

我正在与西班牙的省份名单进行比较。如果我将List<Province> models; public int getIndexIfStartsWith(String str){ for(int index = 0; index < models.size(); index++){ if(str.startsWith(models.get(index).getKey())){ return index; } } return -1; } 作为字符串进行比较,则该方法将针对具有14006(数字类似于“1”,“28”等)和key(名称)的省份列表进行迭代省)。

当我输入value时,方法会返回项目14006,但“1”与“14”不同,它是比较值的乞讨。密钥长度为1的ALAVA不应与“14”(所需值的乞讨)进行比较。

怎么了?

"1", "ALAVA"

Córdoba,14006应该是唯一的比赛,但Alava也将被退回。

我正在使用这个左边用零填充数字,所以我可以每次比较2位数。

compare 14006 against 1, ALAVA
                      2, ALBACETE
                      3, ALICANTE
                      ...
                      14, CORDOBA

之后,我用这个......

public static String padLeft(String stringToPad, int padToLength){
    String retValue = null;
    if(stringToPad.length() < padToLength) {
        retValue = String.format("%0" + String.valueOf(padToLength - stringToPad.length()) + "d%s",0,stringToPad);
    }
    else{
        retValue = stringToPad;
    }
    return retValue;
  }

1 个答案:

答案 0 :(得分:1)

你的错误方式。当它在第一个省"1", "ALAVA"上进行测试时,您正在测试14006 starts with 1是否为真,当您要测试1 starts with 14006时哪个是假的,并且仅在您到达时才会通过14006密钥。

应该是

  if(models.get(index).getKey().startsWith(str)) { 
     ...
  }

注意

你的方法只返回第一个匹配,如果你传递let {s} "2",可能会有几个匹配,也许你应该返回一个List。

但如果你想要一个完美的匹配,你应该使用equals()

编辑(新要求定义后)

鉴于以下省份列表:

List<Province> models = new ArrayList<>();
models.add(new Province("1", "ALAVA"));
models.add(new Province("2", "ALBACETE"));
models.add(new Province("3", "ALICANTE"));
models.add(new Province("14", "CORDOBA"));

您可以使用以下方法返回匹配的索引

public static int getIndexIfStartsWith(String str){

  int matchingIndex = -1;

  // make sure we have at least 2 digits (left pad if needed)
  if(str.length() == 1) {
    str = "0"+str;
  }

  String first2Digits = str.substring(0, 2);

  for(int i=0; i<models.size(); i++) {
    String provinceKey = models.get(i).getKey();
    // make sure the province key also has at least 2 digits (left pad if needed)
    if(provinceKey.length() == 1) {
      provinceKey = "0" + provinceKey;
    }

    if(provinceKey.startsWith(first2Digits))
      matchingIndex = i;
  }
  return matchingIndex;
}

这会返回ALAVA为“1”和“01”,CORDOBA为“14”和“14006”