我正在使用方法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;
}
答案 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”