簡體   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