4

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

编写一个静态方法 ,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: +

不太清楚那是什么意思....

4

8 回答 8

2

主要问题是您不能拥有一个在添加元素时使其自身变大的数组。

您有 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"建议指出您可能必须逐字符处理数组。

于 2013-04-18T16:19:09.973 回答
1

First, try and print out all the elements in your split array. Remember, you do only want you look at words. So, examine if this is the case by printing out each element of the split array inside your for loop. (I'm suspecting you will get a false positive at the moment)

Also, you need to revisit your books on arrays in Java. You can not dynamically add elements to an array. So, you will need a different data structure to be able to use an add() method. An ArrayList of Strings would help you here.

于 2013-04-18T16:19:49.623 回答
1

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

于 2013-04-18T16:34:50.237 回答
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]);
    }
于 2013-09-20T00:49:33.097 回答
0

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

于 2013-04-18T16:30:37.427 回答
0

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

于 2013-04-18T16:22:51.700 回答
0

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

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

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

于 2013-04-18T17:24:56.927 回答
0

除了 String 数组声明中的语法错误之外,应该像 new String[n] 和 add 方法在 Array 中不会出现,因此您应该像 a[i] = split[i]; 这样使用

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

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

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

于 2013-04-18T16:45:25.587 回答