Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中识别字符串数组中最长的字母单词?(任何不带符号或数字的子字符串)_Java_Arrays_String_Character - Fatal编程技术网

如何在Java中识别字符串数组中最长的字母单词?(任何不带符号或数字的子字符串)

如何在Java中识别字符串数组中最长的字母单词?(任何不带符号或数字的子字符串),java,arrays,string,character,Java,Arrays,String,Character,我是Java新手,我需要解决一个需要以下内容的练习: 对于用户输入的字符串,返回最大的单词(到目前为止,这里还不错) 但是,应该考虑到数字和符号不是文字 例如:Hello,我的名字是Jonathan,我的电话是0123456789应该返回“Jonathan”作为最长的单词 示例2:h3llow0rld,java1s有趣,应将“Java”作为最长单词返回 在我的伪代码中,我考虑了以下内容: A) 请求用户输入。 B) 当输入无效时,循环。 C) 扫描输入 D) 用空格或标记分隔单词。 E)

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

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

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

例如:
Hello,我的名字是Jonathan,我的电话是0123456789
应该返回
“Jonathan”
作为最长的单词

示例2:
h3llow0rld,java1s有趣
,应将
“Java”
作为最长单词返回

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

这是我目前掌握的代码。正如您所看到的,许多部分都取自这里,并根据代码进行了调整。“查找数组中最长的字符”是一个流行的主题,但我无法检查字母字符。 欢迎任何帮助

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

代码:

package-longestword;
导入java.util.Scanner;
公共类最长单词{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
System.out.print(“输入字符串:”);
//非空字符串的循环
int最大长度=0;
字符串最大单词=”;
字符串userinput=sc.nextLine();
while(userinput.equals(“”){
System.out.println(“请插入字符串:”);
userinput=sc.nextLine();
}
for(字符串b:userinput.split(“”){
if(最长单词.长度()==0){
最大长度=b.长度();
最大单词=b;
}else if(b.length()>=最大长度){
最大长度=b.长度();
最大单词=b;
}
}
sc.close();
System.out.println(“最长单词:+最大单词”);
}
公共布尔值isAlpha(字符串用户输入){
char[]chars=userinput.toCharArray();
for(char c:chars){
if(!Character.isleter(c)){
返回false;
}
}
返回true;
}
}
/*
字符c='*';

如果((c>='a'&&c='a'&&c只需将
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;
        }
    }
}

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

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

你为什么不使用你的
isAlpha
方法呢?我正在尝试,只是不知道如何实现itThanks!我只需要寻找如何将其转换为静态,但这应该不是一个问题。感谢Eran的帮助!非常感谢:)。@jonakru这很简单-
公共静态布尔isAlpha(字符串用户输入){}…
感谢Eran所做的一切。我需要的是IsAlpha的实现。现在代码不能正常工作,比如字符串:“asdasd asd4a65sd4a6s5d4a6sd a6s5d4a6s5d4a6s5d4a ssddasssdddddddddd我得到了3行最长的单词:asdasd,然后是正确的答案。这是由我来纠正的。谢谢你提供的帮助!@jonakru奇怪-我尝试了那个输入,只得到了“最长的单词:ssddaassddddddddddddddddddddddddddddd”发现了错误,我错放了一个“}”,包括System.out.println。因此,对于每个单词检查,它都是迄今为止打印的最长单词。谢谢!!!!!!!!!!!!!!!!!!!!!!!!!谢谢你的回答。你可能是对的。碰巧我现在在课程的开始,所以我们希望它用于循环,更基本的东西。
String longestWorld =
    Arrays.stream(userInput.split("[^a-zA-z]"))
          .max(Comparator.comparing(String::length).reversed())
          .orElse(null);