【问题标题】:Trying to retrieve the first longest word from a string, where a sentence contains strings of the same length ?试图从字符串中检索第一个最长的单词,其中一个句子包含相同长度的字符串?
【发布时间】:2018-12-01 16:47:04
【问题描述】:
public class Challenge{                                             
public static String longestWord(String sentence){                                              
    String s= sentence;                                             
    String[] word=s.split(" ");                                             
    String four=" ";                                                
    for(int i=0;i<word.length;i++){                                             
      if(word[i].length()>=four.length()){                                              
        four=word[i];                                               
      }                                             
    }                                               
  return four;                                              
} 

我在这里苦苦挣扎的是,如果我有句子“这有很多是四长”,则代码默认打印“四”而不是我需要的“这个” - 我不知道如何实现允许我从给定句子中返回第一个最长字符串的代码。任何帮助将不胜感激。

【问题讨论】:

  • 欢迎来到 Stack Overflow!看起来您可能需要学习使用调试器。请帮助自己一些complementary debugging techniques。如果您之后仍有问题,请edit您的问题更具体地说明您需要什么帮助。
  • 您的代码打印的是 long 而不是 four,仅供参考..
  • @NicholasK 是的,抱歉混淆了我知道的变量名:/

标签: java string loops for-loop split


【解决方案1】:

当长度等于当前单词时,您只需要停止覆盖您存储的“最长单词”。在您的 if 语句中将 &gt;= 替换为 &gt; 应该可以解决问题。

【讨论】:

    【解决方案2】:

    您的变量名称令人困惑且多余。我会假设最长的单词是第一个单词,然后从第二个单词开始循环。你想要&gt;(不是&gt;=)。喜欢,

    public static String longestWord(String sentence) {
        String[] words = sentence.split("\\s+");
        String longest = words[0];
        for (int i = 1; i < words.length; i++) {
            if (words[i].length() > longest.length()) {
                longest = words[i];
            }
        }
        return longest;
    }
    

    在 Java 8+中

    public static String longestWord(String sentence) {
        return Stream.of(sentence.split("\\s+")).max(
                (a, b) -> Integer.compare(a.length(), b.length())).get();
    }
    

    【讨论】:

    • 恕我直言,正则表达式应包括插接。
    【解决方案3】:

    您可以在 Java 8 中尝试:

    public static String longestString(String sentence){
        return Stream.of(sentence.split("\\s+"))
                .max(Comparator.comparing(String::length))
                .orElse("");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 2013-10-12
      • 2020-10-12
      相关资源
      最近更新 更多