不确定如何设置此方法,该方法获取String数组作为参数,并且必须在新数组中返回满足以下条件的所有值: 数组的每个元素中25%的字符是数字;
public static String[] returnSentence(String[] str){
int nrOfWords = str.length;
int count = 0;
for(int i = 0; i < nrOfWords; i++){
for(int j = 0; j < str[i].length; j++){
}
}
}
我有个想法,应该是这样,但是无法格式化代码以测试条件...
答案 0 :(得分:1)
您只需要替换每个元素中的所有非数字,然后像这样比较长度即可:
public static List<String> returnSentence(String[] str) {
int nrOfWords = str.length;
List<String> result = new ArrayList<>();
for (int i = 0; i < nrOfWords; i++) {
if(str[i].replaceAll("\\D", "").length() == str[i].length() * 0.25){
result.add(str[i]);
}
}
return result; // If you want an array use : return result.toArray(String[]::new);
}
我也将使用List而不是array作为结果,因为您不知道有多少元素符合条件。
如果您想解决流媒体问题,那就更容易了:
public static String[] returnSentence(String[] str) {
return Arrays.stream(str)
.filter(s-> s.replaceAll("\\D", "").length() == s.length() * 0.25)
.toArray(String[]::new);
}
答案 1 :(得分:1)
您的问题基本上可以归结为找出在给定条件下,字符串中有多少个字符完全填充,而有多少个则没有。
有两种方法可以做到这一点:
1)简单地计算字符:
int numPositiveChars = 0;
int numNegativeChars = 0;
for (int i = 0; i < s.length(); i++){
char c = s.charAt(i);
if (/*check c here*/)
numPositiveChars++;
else
numNegativeChars++;
}
实际上,您甚至不需要计算负数,因为该值只是s.length() - numPositiveChars
。
2)另一种方法是使用正则表达式,例如通过删除所有非数字字符然后获取字符数:
int numPositiveChars = s.replaceAll("[^0-9]+", "").length();
此行将从字符串中删除所有非数字字符(非0-9),然后返回结果的长度(数字字符数)。
一旦您有符合条件的字符数,计算百分比就很简单了。
答案 2 :(得分:0)
像这样的东西
public static String[] returnSentence(String[] str){
int nrOfWords= str.length;
String[] temp_Str = new String[20];
int count = 0;
int k=0;
for(int i = 0;i<nrOfWords;i++){
for(int j = 0;j<str[i].length;j++){
if(Character.isAlphabetic(str[i].getcharat(j)))
{
count++;
}
if((count/100.0)*100>=25)
{ temp_Str[k]=str[i];
k++;
}
}
}
}