如何在字符串中找到最长的单词,甚至

时间:2019-04-09 19:17:50

标签: java arrays

我需要在字符串中找到一个既最长又偶数的单词。一些例子:

句子Time to construct great art。这应该返回字符串time,因为它是长度最大的even字,长度为4,不是construct,因为构造的长度为9这很奇怪。

此外,在Time to write great code的示例中。这应该返回字符串Time,因为它是偶数,并且长度为4。它不会返回单词code,因为Time首先出现。

        String[] array = sentence.split(" ");
        String longestWord = " ";

        for (int i = 0; i < array.length; i ++) {
            if (array[i].length() >= longestWord.length()) {
                longestWord = array[i];
            }
        }

        System.out.println(longestWord);

我的代码成功打印了最长的单词,但是没有考虑最长的字符串长度是否为偶数,以及是否最先出现。

我尝试在for循环中使用一些模数字符,但是它没有跟踪最大单词是否是偶数,如果不是,则移动到下一个最大单词。

此外,我很难追踪这个词是否先出现。

我曾尝试为什至会计处理的内容:

for (int i = 0; i < array.length; i ++) {
            if (array[i].length() >= longestWord.length()) {
                longestWord = array[i];
                if (longestWord.length() % 2 != 0) {
                    break;
                }
                else {
                    longestWord = array[i];
                }
            }
        }

4 个答案:

答案 0 :(得分:1)

更改是您从最长的长度而不是> =进行比较,并检查长度是否是偶数。

要适应还有其他符号(如“。”)的情况,请使用Regex模式。

public static void main(String[] args) {
    // TODO Auto-generated method stub

    String input = "I am good.";
    String[] input_words = input.split(" ");
    String longestWord = " ";

    for(String word : input_words) {
        Pattern p = Pattern.compile("^[a-zA-Z]+");
        Matcher m = p.matcher(word);
        m.find();
        if(m.group().length() % 2 == 0 && m.group().length() > longestWord.length()) {
            longestWord = m.group();
        }
    }
    System.out.println("result : " + longestWord);
}

这将打印出最大的第一个出现的偶数字

答案 1 :(得分:0)

使用%(模)运算符是一种常见的评估数字是奇数还是偶数的方法,方法是检查是否除以2会得出余数。您将在此处使用它,如下所示:

if (array[i].length() >= longestWord.length() && array[i].length() % 2 == 0) {
                longestWord = array[i];
         }

编辑:我感到很难过,因为这听起来像是一项作业,所以我不会解决问题的“即将到来”部分。

答案 2 :(得分:0)

您可以使用模运算符(string.length() % 2 == 0 )检查字符串长度是否为偶数:

String longestWord = Arrays.stream(sentence.split(" ")) // creates the stream with words
        .filter(s -> s.length() % 2 == 0) // filters only the even length strings
        .max(Comparator.comparingInt(String::length)) // finds the string with the max length
        .orElse(" "); // returns " " if none string is found

要完成此操作,您可以使用Arrays.stream()查找具有均匀长度的最长字符串:

<script src="node_modules/lodash/lodash.min.js"></script>

答案 3 :(得分:0)

public class HelloWorld {

     public static void main(String []args) {

        String sentence = "this is a sample input for the problem";
        
        String arr[] = sentence.split("\\s+"); // to split the sentence by space (because words are separated by space) 
        
        int len =  0; 
        String word = "";
        for (int i= 0; i< arr.length; i++) {
            if((arr[i].length())%2 == 0) { // check if the length of the word is even 
                int len1 = arr[i].length();
                if (len1 > len ) { // if new length is greater than the previous word's length then assign the value of new length to len variable
                    len = len1;
                    word = arr[i];  // word = highest length word
                }
            }
        }
        System.out.println(word);
     }
}