Java 返回超过5个字母的字符串数组

Java 返回超过5个字母的字符串数组,java,Java,以下是问题说明: 编写一个静态方法getBigWords,该方法获取单个字符串参数并返回一个数组,该数组的元素是参数中包含5个以上字母的单词。(单词定义为连续的字母序列。) 示例:因此,如果传递给该方法的字符串参数是“加拿大有87000000人”,则getBigWords将返回一个由两个元素组成的数组,“人”和“加拿大”。 另一个示例:如果传递给方法的字符串参数是“将请求发送到”support@turingscraft.com,getBigWords将返回一个由三个元素组成的数组,“请求”、“支

以下是问题说明:

编写一个静态方法getBigWords,该方法获取单个字符串参数并返回一个数组,该数组的元素是参数中包含5个以上字母的单词。(单词定义为连续的字母序列。) 示例:因此,如果传递给该方法的字符串参数是“加拿大有87000000人”,则getBigWords将返回一个由两个元素组成的数组,“人”和“加拿大”。 另一个示例:如果传递给方法的字符串参数是“将请求发送到”support@turingscraft.com,getBigWords将返回一个由三个元素组成的数组,“请求”、“支持”和“turingscraft”。

我的方法是声明一个可变长度数组,并将字符串序列拆分为标记片段。然后我将令牌片段传递到一个方法中。本质上,我想检查数组中超过5个元素的每个标记元素是否具有连续的字母序列。如果不是,则中断循环并移动到下一个令牌。如果是这样,请将令牌中的每个字母添加到新的字符串生成器数组中。然后,当所有循环迭代完成后,我将字符串生成器数组作为字符串数组返回。然后我将返回值赋给可变长度数组

我试图弄清楚如何声明数组字符串生成器。数组必须具有可变长度,以便允许我向每个元素追加字母

这是我的密码

public static String getBigWords(String string){
String[] tokens = string.split(" ");
java.util.ArrayList<String> array = new ArrayList<String>();

array = isNoDigit(tokens);

    public static String isNodigit(String[] param);
    StringBuilder[] builder = new StringBuilder[param.length];

    for (int i = 0; param.length(); i++){
        if (param[i].length() > 5){
            for (int j = 0; j < param[i].length(); j++)
                if ((Character.isLetter(param[i].charAt(j))){
                    builder.append(param[i].charAt(j));
                }
                else
                    break;
            }
        }
    }
    return builder.toString         
}
return array.toArray(new String[0]);
}
公共静态字符串getBigWords(字符串){
String[]标记=String.split(“”);
java.util.ArrayList数组=新的ArrayList();
数组=isNoDigit(令牌);
公共静态字符串isNodigit(字符串[]参数);
StringBuilder[]builder=新StringBuilder[参数长度];
对于(int i=0;param.length();i++){
if(参数[i].length()>5){
对于(int j=0;j
更新代码:

public static String[] getBigWords(String sequence) {
sequence = sequence.replace("@", " ");
sequence = sequence.replace(".", " ");
sequence = sequence.replaceAll("\\d+.", "");

java.util.ArrayList<String> array = new java.util.ArrayList<String>();

String[] tokens = sequence.split(" ");

for (int i = 0; i < tokens.length(); i++) {
    if (tokens[i].length() > 5) {
        array.add(tokens[i]);
    }
}
return array.toArray(new String[0]);
}           
公共静态字符串[]getBigWords(字符串序列){
顺序=顺序。替换(“@”和“);
顺序=顺序。替换(“.”,“”);
sequence=sequence.replaceAll(“\\d+。”,”);
java.util.ArrayList数组=新的java.util.ArrayList();
String[]tokens=sequence.split(“”);
for(int i=0;i5){
add(令牌[i]);
}
}
返回array.toArray(新字符串[0]);
}           

我相信这就是您想要的。显然,您需要获取代码并按需要实现它。这为您提供了如何使用正则表达式以更简单的方式实现最终目标的要点。这将查找任何大于5个字母(仅字母a-z,大写或小写)的单词,并将它们添加到ArrayList对象中

import java.util.*;
import java.util.regex.*;

public class Test
{
    public static void main(String[] args)
    {
        String s = "There are 87,000,000 people in Canada";
        List<String> allMatches = new ArrayList<String>();
        Matcher m = Pattern.compile("([a-zA-Z]{6,})").matcher(s);

        while (m.find())
        {
            allMatches.add(m.group());
        }
    }
}
import java.util.*;
导入java.util.regex.*;
公开课考试
{
公共静态void main(字符串[]args)
{
String s=“加拿大有87000000人”;
List allMatches=new ArrayList();
Matcher m=Pattern.compile(([a-zA-Z]{6,})”).Matcher(s);
while(m.find())
{
添加(m.group());
}
}
}

如果您想了解有关regex的更多信息,我建议您学习本教程:

请注意:此代码仅用于演示。我没有执行任何错误检查等。您需要添加适合您的应用程序的代码。 你可以试试这样的

public class StackOverFlow {
    public static void main(String[] args) {
        String str1 = "There are 87,000,000 people in Canada";
        String str2 = "Send the request to support@turingscraft.com";

        String[] bigWordsArray = getBigWords(str1);

        System.out.println("Printing results from first String");
        for (String string : bigWordsArray) {
            System.out.println(string);
        }
        bigWordsArray = getBigWords(str2);

        System.out.println("Printing results from second String");
        for (String string : bigWordsArray) {
            System.out.println(string);
        }
    }

    public static String[] getBigWords(String testString) {
        testString = testString.replace('@', ' ');
        testString = testString.replace('.', ' ');
        testString = testString.replaceAll("\\d+.", "");

        String[] tokens = testString.split(" ");

        StringBuilder sb = new StringBuilder();
        for (String string : tokens) {
            if (string.length() > 5) {
                sb.append(string).append(" ");
            }
        }
        return sb.toString().split(" ");
    }
}
这将编译并运行,请参见下面的输出。

你的问题是什么?我看到很多单词都没有问号……这个问题似乎很含蓄:我的代码甚至没有编译,你能给我一个吗?@user2491965:“(.[a-zA-Z].{5,}”@user3580294它不应该是
”([a-zA-Z]{5,})”
?看起来。*会很贪婪,如果它在()然后它会保存在组中。@JeffWard我不知道,从我阅读海报说明书的方式来看,这些字母似乎不必是连续的。可能是因为遗漏了,或者是我误读了……谢谢你的帮助。没问题。很高兴我能帮上忙。我认为解决方案可行,但程序不允许我使用List。您可以将其转换为使用数组。它不允许我对可变长度数组使用List或ArrayList。而且我不能对每个循环使用for,因此我使用for循环。请立即尝试无arryList。仅使用数组。但输出相同。如果有效,请将其标记为应答:)