将字符串拆分为已定义的数组

时间:2013-12-09 08:09:37

标签: java regex arrays string split

基本上我需要做的只是将句子的前十个单词保存到数组中。我从我的代码中知道,如果它大于10,所有单词都将被保存,但我只循环遍历循环10次,所以它停止了。但是,如果句子少于10个单词,我需要用空字符串填充它。所以如果它有10个或更多单词,我可以让它工作。但是,如果少于10个单词,我就无法工作。有没有人知道如何使它工作?我必须有一个10的数组大小。

String[] tempString = new String[10];
    tempString = sentence.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");
    for(int i = 0; i < tempString.length; i++)
    {
      System.out.println(tempString[i]);
    }

编辑:

所以基本上如果我输入句子:&#34;一个二三四有五六七八九十,&#34;它会奏效。但是,如果我进入&#34;一,二,三&#34;它会给我一个ArrayOutofBoundsException。我需要填充的其他7个索引是一个空字符串。

5 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

 for(int i = 0; i < 10; i++)
    {
       if (i < tempString.length)
          System.out.println(tempString[i]);
       else
          System.out.println("");
    }

由于您需要10次打印,因此您需要迭代10次。每次迭代都会检查您是否仍在分割的字符串数组中。如果不是只是根据需要用空的空间填充其余部分。

答案 1 :(得分:1)

喜欢这个

if(tempString.length<10)
  tempString = Arrays.copyOf(tempString, 10);

答案 2 :(得分:1)

String[] tempString = new String[10];
tempString = sentence.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");

以上两条线没有多大意义。第一行创建一个长度为10的新数组并将其分配给变量tempString,但第二行说:让我们忘记这个数组,然后重新分配一个包含句子所有单词的新数组到tempString变量。

所以你实际上需要两个变量:

String[] result = = new String[10];
String allWords = sentence.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+");

// now copy at most 10 elements from allWords to result:
for (int i = 0; i < result.length && i < allWords.length; i++) {
    result[i] = allWords[i];
}

// and now initialize the rest of the array with empty strings
for (int i = allWords.length; i < result.length; i++) {
    result[i] = "";
}

答案 3 :(得分:0)

有两种方法可以实现这一目标。

  1. 在调用代码中显示的for循环之前,将所有字符串初始化为“”(在for循环中..)。

  2. 循环后,如果长度小于10,则将剩余项目设置为“”

    if(tempString.length&lt; 10);

    int diff = 10 - tempString.length -1;

  3.   

    循环差异时间并每次添加“”..

    抱歉格式化..

答案 4 :(得分:0)

String[] tempString = Arrays.copyOf(sentence.replaceAll("[^a-zA-Z ]", "").toLowerCase().split("\\s+"), 10);