有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java搜索字符串中的大写字母

我试图在字符串中搜索大写字母的最后一个索引。我不介意使用正则表达式,但我对它们不太熟悉

int searchPattern = searchString.lastIndexOf(" ");      
String resultingString = searchString.substring(searchPattern + 1);

如您所见,使用当前代码,我正在查找字符串中包含的最后一个空格。我需要更改此项以搜索最后一个大写字母


共 (6) 个答案

  1. # 1 楼答案

    您可以编写如下方法:

    public int lastIndexOfUCL(String str) {        
        for(int i=str.length()-1; i>=0; i--) {
            if(Character.isUpperCase(str.charAt(i))) {
                return i;
            }
        }
        return -1;
    }
    
  2. # 2 楼答案

    LeetCode-检测大写字母

    class Solution {
        public boolean detectCapitalUse(String word) {
            int len = word.length();
    
            if (word.charAt(0) >= 'A' && word.charAt(0) <= 'Z') {
                if (word.charAt(len-1) >= 'A' && word.charAt(len-1) <= 'Z') {
                    for (int i = 1 ; i < len-1 ; i++) {
                        if ( word.charAt(i) < 'A' || word.charAt(i) > 'Z')
                            return false;
                    }
                } else {
                    for (int i = 1 ; i <= len-1 ; i++) {
                        if ( word.charAt(i) < 'a' || word.charAt(i) > 'z')
                            return false;
                    }
                }
            } else {
                for (int i = 0 ; i <= len-1 ; i++) {
                    if ( word.charAt(i) < 'a' || word.charAt(i) > 'z')
                        return false;
                }
            }
            return true;
        }
    }
    
  3. # 3 楼答案

    在Android(Java)中,您可以使用:

    String s = MyDocumentFileIsHere;
    String textWithSpace = s.replaceAll("(.)([A-Z])", "$1 $2");
    holder.titleTxt.setText(textWithSpace);
    

    字符串的结果将是“我的文档文件在这里”

  4. # 4 楼答案

    Pattern pat = Pattern.compile("[A-Z][^A-Z]*$");
    Matcher match = pat.matcher(inputString);
    
    int lastCapitalIndex = -1;
    if(match.find())
    {
        lastCapitalIndex = match.start();
    }
    

    lastCapitalIndex将包含inputString-1中最后一个大写字母的索引(如果没有大写字母)

    编辑说明:解决方案以前包含一个循环,现在它只需一次调用find()就可以工作,而且由于改进了regex,因此没有循环。也测试了新的模式,并且成功了

  5. # 5 楼答案

    您可以将字符串的每个字符与ASCII表中的大写字符范围(十进制65('A')到90('Z'))进行比较

  6. # 6 楼答案

    在这里,您可以提高代码的可读性,并从现代Java的一些其他特性中获益。请使用流方法解决此问题

    /**
     * Finds the last uppercase letter in a String.
     */
    public class FindLastCapitalLetter {
        public static void main(String[] args) {
            String str = "saveChangesInTheEditor";
            int lastUppercaseLetter = findLastUppercaseLetter(str);
            if (lastUppercaseLetter != -1) {
                System.out.println("The last uppercase letter is "
                        + Character.toString((char) lastUppercaseLetter));
            } else {
                System.out.println("No uppercase letter was found in the String.");
            }
        }
    
        private static int findLastUppercaseLetter(String str) {
            return new StringBuilder(str).reverse().toString().chars()
                    .filter(c -> Character.isUpperCase(c)).findFirst().orElse(-1);
        }
    }
    

    样本输出:

    最后一个大写字母是E

    此外,此代码还提供字符串中最后一个大写字母的索引

    import java.util.stream.IntStream;
    
    /**
     * Finds the index of the last uppercase letter in a String.
     */
    public class FindIndexOfLastUppercaseLetter {
        public static void main(String[] args) {
            String str = "saveChangesInTheEditor";
            int lastUppercaseLetterIndex = findLastUppercaseLetter(str);
            if (lastUppercaseLetterIndex != -1) {
                System.out.println("The last uppercase letter index is " + lastUppercaseLetterIndex
                        + " which is " + str.charAt(lastUppercaseLetterIndex));
            } else {
                System.out.println("No uppercase letter was found in the String.");
            }
        }
    
        private static int findLastUppercaseLetter(String str) {
            int[] stringChars = str.chars().toArray();
            int stringCharsLenght = stringChars.length;
            return IntStream.range(0, stringCharsLenght)
                    .map(i -> stringCharsLenght - i - 1)
                    .filter(i -> Character.isUpperCase(stringChars[i]))
                    .findFirst().orElse(-1);
        }
    }
    

    样本输出:

    最后一个大写字母索引是16,即E