返回所有符合条件的字符串值

时间:2019-03-25 17:36:20

标签: java arrays string

不确定如何设置此方法,该方法获取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++){

        }
    }
}

我有个想法,应该是这样,但是无法格式化代码以测试条件...

3 个答案:

答案 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++;
       }


    }
}

}