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

时间:2014-05-04 02:49:22

标签: java

以下是问题规范:

编写一个静态方法getBigWords,它获取单个String参数并返回一个数组,其元素是参数中包含5个以上字母的单词。 (一个词被定义为一个连续的字母序列。) 示例:因此,如果传递给方法的String参数是"加拿大有#87;有87,000,000人,则getBigWords将返回两个元素的数组," people"和#34;加拿大"。 另一个例子:如果传递给方法的String参数是"将请求发送到support@turingscraft.com&#34 ;, getBigWords将返回一个包含三个元素的数组," request",&#34 ;支持"和" turingscraft"。

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

我试图弄清楚如何声明一个数组字符串构建器。数组必须是可变长度的,以允许我为每个元素添加字母。

这是我的代码。

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]);
}

更新的代码:

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]);
}           

2 个答案:

答案 0 :(得分:1)

我相信这就是你想要的。显然,您需要接受代码并按需要实现它。这为您提供了如何使用正则表达式以更简单的方式实现最终目标的要点。这会找到大于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());
        }
    }
}

如果您想了解有关正则表达式的更多信息,我建议您使用本教程:regexone

答案 1 :(得分:0)

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

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(" ");
    }
}

这个编译和工作见下面的输出。 enter image description here