检查String是否以给定的字符开头,无论大写,小写

时间:2018-03-14 12:33:43

标签: java android string

所以输入:

arrondissement d

我应该得到输出:

Arrondissement de Boulogne-sur-Mer
Arrondissement Den Bosch

所以它应该回馈两个结果。因此,在下面的代码中,我将单词的每个第一个字符大写,但这不正确,因为有些单词不是以大写字母开头。

public ArrayList<City> getAllCitiesThatStartWithLetters(String letters) {
    ArrayList<City> filteredCities = new ArrayList<>();

    if (mCities != null) {
        for (City city : mCities) {
            if (city.getName().startsWith(new capitalize(letters))) {
                filteredCities.add(city);
            }
        }
    }
    return filteredCities;
}

public String capitalize(String capString){
    StringBuffer capBuffer = new StringBuffer();
    Matcher capMatcher = Pattern.compile("([a-z])([a-z]*)", Pattern.CASE_INSENSITIVE).matcher(capString);
    while (capMatcher.find()){
        capMatcher.appendReplacement(capBuffer, capMatcher.group(1).toUpperCase() + capMatcher.group(2).toLowerCase());
    }

    return capMatcher.appendTail(capBuffer).toString();
}

4 个答案:

答案 0 :(得分:3)

String有一个非常有用的regionMatches方法,带有ignoreCase参数,因此您可以检查字符串的某个区域是否与另一个不区分大小写的字符串匹配。

String alpha = "My String Has Some Capitals";
String beta = "my string";
if (alpha.regionMatches(true, 0, beta, 0, beta.length())) {
    System.out.println("It matches");
}

答案 1 :(得分:1)

您可以使用apache String utils:

import org.apache.commons.lang.StringUtils;
...
StringUtils.startsWithIgnoreCase(city.getName(), letters)

答案 2 :(得分:0)

您可以String::matches使用此正则表达式(?i)searchWord.*而非(?i)表示不区分大小写

String searchWord = "arrondissement d";
String regex = "(?i)" + Pattern.quote(searchWord) + ".*";

boolean check1 = "Arrondissement de Boulogne-sur-Mer".matches(regex);  //true
boolean check2 = "Arrondissement Den Bosch".matches(regex);            //true

我使用了使用Pattern::quote来转义输入中的特殊字符。

答案 3 :(得分:0)

使用String.toLowerCase()代替使用正则表达式进行比较,以便两个字符串都是小写的,从而无需考虑大写值。使用String.split(" ")将您的短语转换为字符串数组,您可以轻松地将每个索引的第一个字符转换为大写字母。重新组合你的字符串数组以形成你的短语,你就拥有它。