Java 检查字符串是否大于60%大写

Java 检查字符串是否大于60%大写,java,string,percentage,uppercase,Java,String,Percentage,Uppercase,我的问题很简单:如何检查一个字符串是否超过60%大写?遍历该字符串并计算每个大写字符。然后将该值除以字符串长度。尝试: int uppers = 0; for(char c : s.toCharArray()) { if(Character.isUpperCase(c)) { ++uppers; } } double pct = (uppers * 1D) / (s.length() * 1D) * 100D; if(pct > 60D) { // d

我的问题很简单:如何检查一个字符串是否超过60%大写?

遍历该字符串并计算每个大写字符。然后将该值除以字符串长度。

尝试:

int uppers = 0;
for(char c : s.toCharArray()) {
    if(Character.isUpperCase(c)) {
        ++uppers;
    }
}
double pct = (uppers * 1D) / (s.length() * 1D) * 100D;
if(pct > 60D) {
   // do somnething
}

像那样的东西应该可以。根本没有测试过

public boolean getPercentUpperCase(String str, int morethenpercent) {    
    int lowercaseChars = 0, uppercaseChars = 0;

    for (int i = 0; i >= str.length() -1; i++) {
        if (Character.isUpperCase(str.charAt(i))) {
            uppercaseChars++;
        } else {
            lowercaseChars++;
        }
    }

    return (Math.round(uppercaseChars / lowercaseChars) > morethenpercent);
}
试试这个

String test="AvCFrB";
char[] arr = test.toCharArray();
int count = 0;
for (int i = 0; i < arr.length; i++) {
    boolean upperCase = Character.isUpperCase(arr[i]);
    System.out.println(arr[i]+"="+upperCase);

    if(upperCase)
        count++;

}

double percentage = (count*1.0/test.length()*1.0)*100;
System.out.println(percentage);

它完全基于编程和数学。你最好自己编写这个程序。但是,您可以遵循以下流程

获取字符串大小 检查字符串的所有字符 计算每个大写字母 应用公式100*总字符数/字符串大小
我在这里给出了我的解决方案,看起来像其他解决方案,但我认为有一些改进。 您可以在此处尝试我的解决方案:

请注意,我使用while循环,因为我不喜欢break:


您还可以使用Java8中的流API来实现这一点

public class Test { 
    public static void main(String[] args){
        System.out.println(is60PercentUpper("aBc GH")); //true
    }

    public static boolean is60PercentUpper(String s){
    return s.chars()
            .filter(Character::isLetter)
            .map(entry -> Character.isUpperCase(entry) ? 1 : 0)
            .summaryStatistics()
            .getAverage() >= 0.60;
    }
}
它所做的是:

从字符串中获取字符流 过滤每个字符以仅获取字母 如果每个字符值都是大写的,则将其映射为1,否则为0 获取汇总统计数据,检查平均值是否优于或等于60%
通过循环并使用myString.charAtPlease显示您已有的代码,并告诉我们您有哪些问题。这通常是正确的方法,尽管如果您移动到公共字母表之外,AIUI确定大写字母可能会变得非常粗糙。如果字符串有空格,该怎么办?如果它有非拉丁字母字符怎么办?您可能还需要计算小写字符,这取决于您如何定义60%。是所有字符的60%,还是字母字符的60%。如果是后者,则百分比为上限/上限+lower@blgt编写代码的人需要自己决定或澄清规则。这个答案和问题一样准确,正确的方法你可以改进使用while,当大写字母大于str.length*0.6时停止,也可以在整个迭代后停止。你不需要小写字母,因为小写字母应该像str.length-uppercaseChars一样考虑。我不确定它是否真的是一种改进,如果它高于str.length-uppercaseChars,那么每次都计算,而不是计算它是否是大写字母,这将是一种改进。但我认为,它的细绳不会是一根巨大的细绳。但是,为什么我-?这毫无意义!不管是增加还是减少。不管怎样,换了。
int upCount = 0;
int index = 0;
double percentLimit = str.length() * 0.6;
boolean upper = false;
while (!upper && (index < str.length())) {
    if(Character.isUpperCase(str.charAt(index))) {
        upCount++;
        upper = upCount >= percentLimit;
    }
    index++;
}
return upper;
int upCount = 0;
double percentLimit = str.length() * 0.6;
for (char c : str.toCharArray()) {
    if(Character.isUpperCase(c)) {
        upCount++;
        if (upCount >= percentLimit) {
            break;
        }
    }
}
return (upCount >= percentLimit);
public class Test { 
    public static void main(String[] args){
        System.out.println(is60PercentUpper("aBc GH")); //true
    }

    public static boolean is60PercentUpper(String s){
    return s.chars()
            .filter(Character::isLetter)
            .map(entry -> Character.isUpperCase(entry) ? 1 : 0)
            .summaryStatistics()
            .getAverage() >= 0.60;
    }
}