【问题标题】:How to recognise Longest Alphabetic word in an array of strings in Java? (any substring without symbols or numbers)如何识别Java中字符串数组中最长的字母单词? (任何不带符号或数字的子串)
【发布时间】:2019-03-25 07:54:39
【问题描述】:

我是 Java 新手,我需要解决一个需要以下内容的练习:

对于用户输入的字符串,返回最大的单词(到目前为止这里很好)

但是,应该考虑到数字和符号不是文字。

例如:Hello, my name is Jonathan and my phone is 0123456789 应返回 "Jonathan" 作为最长单词。

示例 2:H3llo W0rld, Java 1s fun!,应返回 "Java" 作为最长单词。

在我的伪代码中,我想到了以下内容:
A) 请求用户输入。
B) 当输入无效时,循环。
C) 扫描输入
D) 用空格或记号分隔单词。
E) 如果 Word 只包含字母 A-Z && a-z,请执行以下代码:
e1) 用 for 检查最长的单词。
e2) 打印结果
F) else if: 移到下一个词。

这是我到目前为止的代码。如您所见,许多部分都取自这里并适应了代码。 “查找最长的数组”是一个流行的主题,但我无法检查字母字符。 欢迎任何帮助。

问题是我不知道如何实现检查字母的部分。

代码:

package longestword;

import java.util.Scanner;

public class LongestWord {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        System.out.print("Enter a String: ");

        //looping for non empty strings
        int largestLength = 0;
        String largestWord = "";
        String userinput = sc.nextLine();
        while (userinput.equals("")) {
            System.out.println("Please insert a String: ");
            userinput = sc.nextLine();
        }

        for (String b : userinput.split(" ")) {
            if (largestWord.length() == 0) {
                largestLength = b.length();
                largestWord = b;
            } else if (b.length() >= largestLength) {
                largestLength = b.length();
                largestWord = b;
            }
        }
        sc.close();
        System.out.println("Longest Word: " + largestWord);

    }

    public boolean isAlpha(String userinput) {
        char[] chars = userinput.toCharArray();

        for (char c : chars) {
            if (!Character.isLetter(c)) {
                return false;
            }
        }
        return true;
    }
}
/*

     char c = '*';

        if( (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
            System.out.println(c + " is an alphabet.");
        else
            System.out.println(c + " is not an alphabet.");
    }
}
*/

【问题讨论】:

  • 你为什么不使用你的isAlpha方法?
  • 我正在尝试,只是不知道如何实现它

标签: java arrays string character


【解决方案1】:

只需将您的 isAlpha 方法更改为 static 并按如下方式使用它:

for (String b : userinput.split(" ")) {
    if (isAlpha(b)) {
        if (largestWord.length() == 0) {
            largestLength = b.length();
            largestWord = b;
        } else if (b.length() >= largestLength) {
            largestLength = b.length();
            largestWord = b;
        }
    }
}

【讨论】:

  • 谢谢!我只需要寻找如何将其转换为静态,但这应该不是问题。感谢 Eran 的帮助!真的很感激:)。
  • @jonakru 这很简单 - public static boolean isAlpha(String userinput) {}...
  • 感谢 Eran。我需要的是 IsAlpha 的实现。现在代码不能正常工作,对于一个字符串:“asdasd asd4a65sd4a6s5d4a6sd a6s5d4a6s5d4a ssddaasssddddddddd 我得到了 3 行最长的单词:asdasd,然后是正确的答案。我要纠正它。感谢提供的帮助!跨度>
  • @jonakru 奇怪 - 我尝试了那个输入并且得到了“最长的单词:ssddaasssddddddddd”
  • 发现错误,我放错了“}”,其中包括 System.out.println。因此,对于每个单词检查,它都打印了迄今为止最长的单词。谢谢!!!!!!!!!!!!!!!!
【解决方案2】:

一种可能更简单的方法是用任何非字母字符分割字符串,让 Java 的流为您完成繁重的工作:

String longestWorld =
    Arrays.stream(userInput.split("[^a-zA-z]"))
          .max(Comparator.comparing(String::length).reversed())
          .orElse(null);

【讨论】:

  • 感谢您的回复。你可能是对的。碰巧我现在正处于课程的开始阶段,所以我们希望我们使用 For、While、Loops 等更基本的东西。
猜你喜欢
  • 2020-03-30
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
相关资源
最近更新 更多