Java 检查字符串是否大于60%大写
我的问题很简单:如何检查一个字符串是否超过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
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;
}
}