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

Java 搜索字符串中的大写字母,java,Java,我试图在字符串中搜索大写字母的最后一个索引。我不介意使用正则表达式,但我对它们不太熟悉 int searchPattern = searchString.lastIndexOf(" "); String resultingString = searchString.substring(searchPattern + 1); 如您所见,使用当前代码,我正在查找字符串中包含的最后一个空格。我需要更改此项以搜索最后一个大写字母 Pattern pat = Pattern.compile(

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

int searchPattern = searchString.lastIndexOf(" ");      
String resultingString = searchString.substring(searchPattern + 1);
如您所见,使用当前代码,我正在查找字符串中包含的最后一个空格。我需要更改此项以搜索最后一个大写字母

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,因此不会出现循环。也测试了新模式,并且成功了。

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

您可以编写如下方法:

public int lastIndexOfUCL(String str) {        
    for(int i=str.length()-1; i>=0; i--) {
        if(Character.isUpperCase(str.charAt(i))) {
            return i;
        }
    }
    return -1;
}
在Android(Java)中,您可以使用:

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

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

您可以提高代码的可读性,并从现代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

LeetCode-Detect大写字母

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;
    }
}
类解决方案{
公共布尔检测算法(字符串字){
int len=word.length();
如果(单词字符(0)>='A'&单词字符(0)='A'&单词字符(len-1)'Z')
返回false;
}
}否则{
对于(int i=1;i'z')
返回false;
}
}
}否则{
对于(int i=0;i'z')
返回false;
}
}
返回true;
}
}

您应该能够使用模式
(\p{Lu})\p{Lu}*$
进行查找,但是这里的正则表达式过于复杂,向后搜索可能更有效。仅供参考,在Java中,我们有
字符。isUpperCase
。OP要求大写字母,而不是美国大写字母。干杯,欢迎来到这里!