确定给定的单词串是否包含大于5个字母的单词

时间:2013-04-18 16:10:00

标签: java string

所以,我的家庭作业需要帮助。这是问题:

  

编写一个静态方法getBigWords,它获取String参数并返回一个数组,其元素是参数中包含5个以上字母的单词。 (一个单词被定义为一个连续的字母序列。)因此,如果String喜欢“加拿大有87,000,000人”,getBigWords将返回两个元素的数组,“人”和“加拿大”。

到目前为止我所拥有的:

public static getBigWords(String sentence)
{
  String[] a = new String;
  String[] split = sentence.split("\\s");
  for(int i = 0; i < split.length; i++)
  {
    if(split[i].length => 5)
    {
      a.add(split[i]);
    }
  }
  return a;
}

我不想要答案,只是指导我朝正确方向前进的方法。我是编程的新手,所以我很难弄明白我到底做错了什么。

修改

我现在将我的方法修改为:

public static String[] getBigWords(String sentence)
{
    ArrayList<String> result = new ArrayList<String>();
    String[] split = sentence.split("\\s+");
    for(int i = 0; i < split.length; i++)
    {
        if(split[i].length() > 5)
        {
            if(split[i].matches("[a-zA-Z]+"))
            {
                result.add(split[i]);
            }
        }
    }
    return result.toArray(new String[0]);
}

它打印出我想要的结果,但我用来转让作业的在线软件,仍然说我做错了。更具体地说,它表明:

Edith de Stance states:
⇒     You might want to use: +=
⇒     You might want to use: ==
⇒     You might want to use: +

不确定这意味着什么......

8 个答案:

答案 0 :(得分:2)

主要问题是你不能在添加元素时使数组更大。

您有两个选择:

  • ArrayList(基本上是一个可变长度数组)。

  • 确保阵列更大。

另外,还有一些注意事项:

数组的定义需要如下所示:

int size = ...;      //  V- note the square brackets here
String[] a = new String[size];

数组没有add方法,您需要自己跟踪索引。

您目前只拆分空格,因此87,000,000也会匹配。您可以手动验证字符串,以确保它只包含字母。

它是>=,而不是=>

我相信函数需要返回一个数组:

public static String[] getBigWords(String sentence)

它实际上需要返回一些内容:

return result.toArray(new String[0]);

而不是

return null;

"You might want to use"建议指出您可能必须按字符处理数组。

答案 1 :(得分:1)

首先,尝试打印出split数组中的所有元素。记住,你只想要看一下单词。因此,通过在for循环中打印出split数组的每个元素来检查是否是这种情况。 (我怀疑你此刻会得到误报)

此外,您需要在Java中重新访问有关数组的书籍。您无法动态地向元素添加元素。因此,您需要一个不同的数据结构才能使用add()方法。字符串的ArrayList将在这里帮助您。

答案 2 :(得分:1)

在白色空间的基础上拆分你的字符串,它将返回一个数组。您可以通过迭代该数组来检查每个单词的长度 您可以通过这种方式分割字符串myString.split("\\s+");

答案 3 :(得分:1)

试试这个......

public static String[] getBigWords(String sentence)
    {
        java.util.ArrayList<String> result = new java.util.ArrayList<String>();
        String[] split = sentence.split("\\s+");
        for(int i = 0; i < split.length; i++)
        {
            if(split[i].length() > 5)
            {
                if(split[i].matches("[a-zA-Z]+"))
                {
                    result.add(split[i]);
                }
                if (split[i].matches("[a-zA-Z]+,"))
                {
                    String temp = "";
                    for(int j = 0; j < split[i].length(); j++)
                    {
                        if((split[i].charAt(j))!=((char)','))
                        {
                            temp += split[i].charAt(j);
                            //System.out.print(split[i].charAt(j) + "|");
                        }
                    }
                    result.add(temp);
                }
            }
        }
        return result.toArray(new String[0]);
    }

答案 4 :(得分:0)

您的逻辑有效,但您有一些语法问题。如果您没有使用像Eclipse这样的IDE来显示语法错误,请尝试注释掉行以确定哪些语法在语法上不正确。我还想告诉你,一旦创建了一个数组,它的长度就不会改变。希望这会让你朝着正确的方向前进。

答案 5 :(得分:0)

你做的是正确的但是你不能在数组中添加方法。你应该设置为[position] = spilled [i];如果要忽略数字,请通过Float.isNumber()方法检查。

答案 6 :(得分:0)

除了语法错误,String数组声明应该像new String [n] 和添加方法不会在数组中,因此你应该使用喜欢 a [i] = split [i];

您需要添加另一个条件以及长度条件来检查给定的单词是否包含所有字母,这可以通过2种方式完成

第一种方法是使用Character.isLetter()方法,第二种方法是创建正则表达式 检查字符串只有字母。谷歌它为正则表达式并使用匹配器匹配如下         Pattern pattern = Pattern.compile();         Matcher matcher = pattern.matcher();

最后一点是使用另一个计数器(假设j = 0)来存储输出值,并在将数组存储在数组中时递增此计数器。 a [j ++] = split [i];

答案 7 :(得分:0)

我会使用字符串标记器(java中的字符串标记化器类)

遍历每个条目,如果字符串长度超过4(或任何你需要的话),则添加到你要返回的数组中。

你说没有代码,所以...(这就像5行代码)