简体   繁体   中英

Find the longest word in a string?

I am trying to write a basic javascript function to find the longest word in a string and log it's length.

So far I have:

function findLongestWord(str) {
  var words = [];
  var longest = [];
  words.push(str.split(" "));
  for(var i = 0; i < words.length; i++){
    if (words[i].length > longest[0].length){
      longest.push(words[i]);
    }
  }
  return longest[0].length;
}

findLongestWord('The quick brown fox jumped over the lazy dog');

It makes perfect sense to me, yet it gives me an error. I tried console.logging each step and it fails around the for loop.

When you use words.push(str.split(" ")) , the array words looks like

[
    ["The", "quick", "brown", "fox", "jumped", "over", "the", "lazy", "dog"]
]

Another problem is that when you check longest[0].length for the first iteration in the for , it is undefined . Which results in the error

Uncaught TypeError: Cannot read property 'length' of undefined

To solve this, you can use longest as string instead of array . And in the for , assign the string having the length greater than the current longest string to it.

At the end of the function, you can return the longest string.

Problems/Suggestions:

  1. Use str.split(' ') to directly assignment to words variable
  2. Use longest as string variable instead of array and initialize it to empty string, ie '' , to avoid the above error
  3. Compare the length of the longest with the string in the words array
  4. If the length of the string in words array is greater than the longest , update the longest .
  5. Use \\s+ to split the string by spaces

 function findLongestWord(str) { var words = str.split(/\\s+/); var longest = ''; for (var i = 0; i < words.length; i++) { if (words[i].length > longest.length) { longest = words[i]; } } return longest; } var longestWord = findLongestWord('The quick brown fox jumped over the lazy dog'); document.write('Longest Word: "' + longestWord + '"'); document.write('<br />Longest Word Length: ' + longestWord.length); 

You can greatly simplify this using Array.prototype.sort and Array.prototype.shift . For example

 var str = 'The quick brown fox jumped over the lazy dog', longest = str.split(' ').sort(function(a, b) { return b.length - a.length; }).shift(); document.getElementById('word').innerHTML = longest; document.getElementById('length').innerHTML = longest.length; 
 <p id="word"></p> <p id="length"></p> 


The sort() will produce an array of strings sorted by their length ( longest to shortest ) and shift() grabs the first element. You could also sort the other way ( shortest to longest ) using return a.length - b.length and pop() instead of shift() to grab the last element.

Try

function longestWord(string) {
    var str = string.split(" ");
    var longest = 0;
    var word = null;
    for (var i = 0; i < str.length; i++) {
        if (longest < str[i].length) {
            longest = str[i].length;
            word = str[i];
        }
    }
    return word;
}
function findLongestWord(str) {
  var arr=str.split(" ");
  var sarr=arr.sort(function(a,b){return b.length-a.length;});
  str=sarr[0];
  return str.length;
}

using the javascript Array.prototype.sort() we can slove this problem elegantly without using the loop

  if (words[i].length > longest[0].length)

You will be getting error in above line. As at first time, it is empty.

Your statement

words.push(str.split(" "));

should be

words=str.split(" ")

And @Tushar solved the rest of your "problems" too ... ;-)

Here is another shorter version:

 function findTheLongestWord(str) { var temp = ''; (str || "").split(/\\s+/).forEach(function(word) { temp = word.length > temp.length && word || temp; }); return "longest word is: " + temp + " and it's length is: " + temp.length; } alert (findTheLongestWord("The quick brown fox jumped over the lazy dog, once again!")); 

To find the longest keyword string in Java you need to write a program.

public class FindLarge {

    private String longestWord;

    public String longestWord(String sen) {

        String arr[] = sen.split(" ");      // seperates each word in the string and stores it in array

        longestWord = arr[0];               // Assume first word to be the largest word

        for (String a : arr)
            if (longestWord.length() < a.length())      // check length of each word
                longestWord = a;

        return longestWord;
    }

    public static void main(String[] args) {

        FindLarge fl=new FindLarge();

        String longestWord=fl.longestWord("Hello Welcome to Java");   // string to be checked

        System.out.println("Longest Word: "+ longestWord);          // Final Output

    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM