【问题标题】:Check if String starts with given characters regardless of upper case, lower case [duplicate]检查字符串是否以给定字符开头,无论大写,小写[重复]
【发布时间】:2018-08-22 23:48:59
【问题描述】:

所以输入:

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

【问题讨论】:

  • 我认为你是在重新发明轮子,这个问题可以像在线代码一样解决。使用String 的内置函数

标签: java android string


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    你可以使用 apache String utils:

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

    【讨论】:

      【解决方案3】:

      您可以将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
      

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

      【讨论】:

        【解决方案4】:

        不要使用正则表达式进行比较,而是使用String.toLowerCase() 以便两个字符串都为小写,无需考虑大写值。使用String.split(" ") 将您的短语转换为字符串数组,您将能够轻松地将每个索引的第一个字符转换为大写字母。重新组合您的字符串数组以形成您的短语,然后就完成了。

        【讨论】:

        • String 中没有 ToLower() 方法。你认为这是什么语言?
        猜你喜欢
        • 1970-01-01
        • 2021-08-12
        • 1970-01-01
        • 2016-03-01
        • 1970-01-01
        • 2013-05-13
        • 2015-02-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多