繁体   English   中英

查找字符串中最长的单词?

[英]Find the longest word in a string?

我正在尝试编写一个基本的javascript函数以查找字符串中最长的单词并记录其长度。

到目前为止,我有:

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');

这对我来说很有意义,但是却给我一个错误。 我尝试了console.logging的每个步骤,但在for循环中均失败了。

当您使用words.push(str.split(" ")) ,数组words看起来像

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

另一个问题是,当您检查longest[0].length在第一次迭代for ,它是undefined 导致错误

未捕获的TypeError:无法读取未定义的属性“ length”

为了解决这个问题,您可以使用longest string而不是array for ,为其分配length大于当前longest字符串的字符串。

在函数末尾,您可以返回longest字符串。

问题/建议:

  1. 使用str.split(' ')直接分配给words变量
  2. 使用longest string变量而不是arrayinitializeinitialize为空字符串,即'' ,以避免上述错误
  3. 比较longest的长度和words数组中的字符串
  4. 如果words数组中字符串的长度大于longest字符串,请更新longest字符串。
  5. 使用\\s+以空格split字符串

 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); 

您可以使用Array.prototype.sortArray.prototype.shift大大简化此过程。 例如

 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> 


sort()将产生一个按长度(从最长到最短 )排序的字符串数组,而shift()将获取第一个元素。 您还可以使用return a.length - b.lengthpop()而不是shift()来获取最后一个元素,以另一种方式(从最短到最长 )排序。

尝试

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;
}

使用javascript Array.prototype.sort()我们可以优雅地解决此问题,而无需使用循环

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

您将在上面的行中得到错误。 与第一次一样,它是空的。

您的声明

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

应该

words=str.split(" ")

@Tushar也解决了您的其余“问题” ... ;-)

这是另一个较短的版本:

 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!")); 

要在Java中找到最长的关键字字符串,您需要编写一个程序。

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

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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